示例:使用变更历史记录事件监视器来调查锁定升级增加情况

可使用变更历史记录事件监视器来检测哪些更改可能导致数据库性能下降。

方案

在此示例中,用户将报告数据库性能下降。数据库管理员 (DBA) 注意到过去 24 小时锁定升级数目过高。DBA 还注意到同一时间段内应用程序锁定等待时间相应增加。
DBA 已在使用变更历史记录事件监视器来监视配置更改、索引更改和装入操作。该事件监视器是使用以下语句创建的:
    CREATE EVENT MONITOR CFGHIST 
    FOR CHANGE HISTORY WHERE EVENT IN (DBCFG, DBMCFG, DBCFGVALUES,
         DBMCFGVALUES,REGVAR,REGVARVALUES, DDLDATA, LOAD)
    WRITE TO TABLE
该事件监视器是使用以下语句激活的:
    SET EVENT MONITOR CFGHIST STATE=1
下表显示 CFGHIST 变更历史记录事件监视器可能写至 CHANGESUMMARY_CFGHIST 表的一些样本事件监视数据。所有变更历史记录事件监视器都将数据写至 CHANGESUMMARY 逻辑数据组。如“CHANGESUMMARY 逻辑数据组”中所述,CHANGESUMMARY 逻辑数据组会返回一些用于概述所捕获事件的事件监视元素,以下输出仅显示了这些元素中的一部分。表名通过将用于填充表 (CHANGESUMMARY) 的逻辑数据组的名称与 CREATE EVENT MONITOR 语句 (CFGHIST) 中给予该事件监视器的名称并置派生。
APPL_ID                      APPL_NAME .... EVENT_ID EVENT_TIMESTAMP    
---------------------------- --------- .... -------- -------------------
*LOCAL.tripathy.111028110756 db2bp     .... 1        28/10/2011 07:12:02  

EVENT_TYPE MEMBER ....
---------- ------ ....
EVMONSTART 0      ....
因为性能以前不存在问题,所以 DBA 怀疑该问题可能由某个最新更改导致,于是执行以下步骤:
  1. 检查 CHANGESUMMARY 逻辑数据组以查找过去 24 小时内所做的任何更改。对于此示例,假定当前时间为 2011 年 10 月 31 日 06:00:00。
     SELECT EVENT_TYPE FROM CHANGESUMMARY_CFGHIST
        WHERE EVENT_TIMESTAMP > CURRENT TIMESTAMP - 24 HOURS
    查询返回下列结果:
      EVENT_TYPE
      ----------
      DBCFG
      DBCFG
    输出指示过去 24 小时内进行了两次数据库配置更新。
  2. 查询 DBDBMCFG 逻辑数据组以获取这些配置更改的详细信息。
  3.  SELECT EVENT_TIMESTAMP, CFG_NAME, CFG_VALUE, CFG_OLD_VALUE, DB_DEFERRED
        FROM DBDBMCFG_CHGHIST
    查询返回下列结果:
      EVENT_TIMESTAMP       CFG_NAME      CFG_VALUE   CFG_OLD_VALUE   DB_DEFERRED
      -------------------   -----------   ---------   -------------   -----------
      30/10/2011 08:41:39   LOCKLIST           1024            2048   N 
      30/10/2011 08:42:35   LOCKTIMEOUT           0              -1   Y 
    输出指示在性能下降的时间段内进行了锁定更改。
DBA 注意到 LOCKTIMEOUT 更改已延迟,于是发出查询以检查数据库是否在进行此配置更改后激活。此检查确定数据库是否实现了此配置更改。如果未实现此更改,那么不太可能是此更改导致性能问题。数据库激活时间记录在 EVMONSTART 逻辑数据组中。缺省情况下,所有变更历史记录事件监视器都将数据写至 EVMONSTART 逻辑数据组。
   SELECT COUNT (*)as POST_CFG_ACTIVATIONS FROM EVMONSTART_CHGHIST
      WHERE DB_CONN_TIME > TIMESTAMP(2011-10-30-08:42:35)
查询返回非零值。
  POST_CFG_ACTIVATIONS
  --------------------
                     1
此非零值确认数据库在 LOCKTIMEOUT 配置参数更改后激活,这意味着新值已生效。DBA 现在了解了系统上进行了哪些更改,并尝试将与锁定相关的配置参数调整回其原始值以查看此操作是否解决了该问题。
注: 如果更改配置参数时变更历史记录事件监视器处于不活动状态,那么该事件监视器将不捕获 DBCFG 事件。反而,变更历史记录事件监视器将在该事件监视器启动后捕获 DBCFGVALUES 事件。在 DBDBMCFG 逻辑数据组中,每行表示一个配置参数,此配置参数作为 DBCFG 或 DBMCFG 事件的一部分更新或作为 DBCFGVALUES 或 DBMCFGVALUES 事件的一部分在事件监视器启动时捕获。CFG_COLLECTION_TYPE 监视元素标识该记录是描述配置参数更新还是在事件监视器启动时记录的初始值。DBA 将需要比较当前变更历史记录事件监视器启动时捕获的值与先前捕获的值,以查找可能导致该问题的已更改值。检查诊断日志也会有所帮助。