DB2 for Linux, UNIX, and Windows 的锁事件,第 3 部分

使用 DB2 9.7 中的锁事件监控器来解决并发性问题

Dirk Fechner, IT 服务专家, IBM
 

简介: 这是 DB2® for Linux®, UNIX®, and Windows® 分析并发性问题选项系列文章的第三篇。DB2 9.7 提供了用于死锁、锁超时、锁等待的集成监控解决方案:新的锁事件监控器。本文介绍了新的锁事件监控器,并演示了如何使用它来分析并发性问题。

简介

本文介绍了新的锁事件监控器,并演示了如何使用它来分析并发性问题。本系列其他文章(查看 参考资料)分别解释了 DB2 8.2/9.1 和 DB2 9.5 的可用选项。这些选项已经作了进一步加强。DB2 9.7 提供了死锁、锁超时、锁等待分析的集成监控方案:新的锁事件监控器。这个锁事件监控器取代了旧的机制和工具。这些机制和工具从 DB2 9.7 开始不再使用,在以后的 DB2 发行版中不再出现。本文介绍了新的锁事件监控器,并演示了如何使用它来分析并发性问题。

创建示例数据库

本文描述了锁事件监控器以及两个并发问题的例子。第一个例子中,创建了 DB2 示例数据库,并设置 DB CFG 的 LOCKTIMEOUT 参数值为 10 秒,如清单 1 所示。


清单 1. 创建 DB2 示例数据库,并设置 LOCKTIMEOUT 值

db2sampl
db2 "UPDATE DB CFG FOR SAMPLE USING LOCKTIMEOUT 10"
						

锁事件监控器收集的信息写进非格式化事件表。之所以这么称,是因为数据以二进制形式存放在表中。非格式化事件表应放在单独表空间中。这可防止表空间由于监控数据过多而意外填满表格或索引数据。有了 DB2 自动存储,很容易为非格式化事件表创建额外存储空间,这是因为表空间不需要任何显式表空间容器定义。清单 2 连接到 SAMPLE 数据库并创建新的 TBSPACE_LOCKING 表空间。


清单 2. 为事件监控数据创建表空间

db2 "CONNECT TO SAMPLE"
db2 "CREATE TABLESPACE TBSPACE_LOCKING"
						

下一步,创建锁事件监控器。选择锁事件监控器本身和其对应的非格式化事件表的名字。例中,锁事件监控器叫做 EVMON_LOCKING。非格式化事件表叫做 TAB_LOCKING,模式为 EMDATA。指定 IN子句,表格放在自己的 TBSPACE_LOCKING 表空间中。


清单 3. 创建锁事件监控器

db2 "CREATE EVENT MONITOR EVMON_LOCKING FOR LOCKING WRITE TO UNFORMATTED EVENT TABLE
    (TABLE EMDATA.TAB_LOCKING IN TBSPACE_LOCKING)"
						

默认情况下,锁事件监控器是随 AUTOSTART 选项生成的,因此当数据库激活时自动开始。为了一开始就开启锁事件监控器而无需重新激活数据库,通过设置其状态值,即 active 为 1 来显式开启,如清单 4 所示。


清单 4. 激活锁事件监控器

db2 "SET EVENT MONITOR EVMON_LOCKING STATE 1"
						

定义生成锁事件的范围

尽管锁事件监控器已激活,但还没开始收集每个会话的并发性问题相关信息。相反您应当指定锁事件监控器所要监控的会话。在两级指定会话:

DB2 Workload Manager (WLM) 概念

工作负载、服务级、工作级、阈值等等都是在 DB2 9.5 中首次引入的与 DB2 WLM 相关的概念。此处,工作负载是数据库对象,它根据会话属性如应用程序名、认证 ID 等新会话路由到服务级中。即使没有用户定义的工作负载,DB2 默认工作负载 SYSDEFAULTUSERWORKLOAD 也存在,它包含不属于任何工作负载的会话。DB2 将这些会话路由到 DB2 的默认服务级 SYSDEFAULTUSERCLASS。因此,即使没有显式使用 DB2 WLM,DB2 的默认 WLM 对象也一直存在。关于 DB2 WLM 的概要及深入信息,请查阅 参考资料

数据库级 从 DB2 9.7 开始,DB CFG 使用三个新的参数:MON_DEADLOCK、MON_TIMEOUT 和 MON_LOCKWAIT。当激活其中任何一个参数后,锁事件监控器开始观察所有的数据库会话,它独立于应用程序名、认证 ID、以及其他参数,监控对应锁事件发生情况:死锁、锁超时或锁等待。 工作负载级 或者,可以配置锁事件监控器观察属于某个工作负载的会话。此时,可以通过设置特定的工作负载选项来激活锁事件集合。

一般来说,死锁或锁超时事件相关的数据集合应当在数据库级激活,因为这些事件通常是应用程序异常。因此,提前限制某种工作负载通常不可能,或根本不需要。另一方面,锁等待事件总会在一定程度上出现。因此将锁等待事件限制到某一工作负载就会有意义。这里给出一般指导原则,就是在为特定的并发性问题决定最佳监控策略前检查这两个选项。

收集某一工作负载的锁超时事件数据

本例中,使用锁事件监控器只收集某一工作负载的锁超时信息。简单起见,不要创建用户定义工作负载。相反使用 DB2 WLM 默认工作负载 SYSDEFAULTUSERWORKLOAD,它包含不属于用户定义工作负载的所有会话。对于 SYSDEFAULTUSERWORKLOAD,锁事件监控器捕获所有锁超时事件。由于已经创建并激活锁事件监控器 EVMON_LOCKING,只要启动所需工作负载的锁事件数据集合,如清单 5 所示。


清单 5. 启动默认用户工作负载的锁超时集合

db2 "ALTER WORKLOAD SYSDEFAULTUSERWORKLOAD COLLECT LOCK TIMEOUT DATA WITH HISTORY"
						

如选中 WITH HISTORY 选项,锁事件监控器收集:

  • 锁超时事件的出错 SQL 语句
  • 在锁超时事件中涉及的事务内部执行的所有其他 SQL 语句

现在,通过试图使用两个不同会话更改 EMPLOYEE 表来故意引起锁超时。第一个会话中,执行让每个员工提高 2% 薪水的事务,然后查询所有员工姓名和新的薪水。由于该事务未执行(自动执行已通过 DB2 CLP 选项 +c 被停用),它对 EMPLOYEE 表中的每行都持有 X-lock(独占锁),如清单 6 所示。


清单 6. 第一个事务 - 让所有员工薪水提高 2%

db2 "CONNECT TO SAMPLE"
db2 +c "UPDATE EMPLOYEE SET SALARY = SALARY * 1.02"
db2 +c "SELECT LASTNAME, FIRSTNME, SALARY FROM EMPLOYEE ORDER BY LASTNAME ASC"
						

在另一个会话中,执行另一个事务,根据现有薪水给每个经理 10% 的奖金,如清单 7 所示。


清单 7. 第二个事务:给所有经理 10% 的奖金

db2 "CONNECT TO SAMPLE"
db2 +c "UPDATE EMPLOYEE SET BONUS = SALARY * 0.1 WHERE JOB = 'MANAGER'"
						

由于第一个事务锁住所有经理和其他员工行,锁超时 10 秒后发生(记住 LOCKTIMEOUT 参数设置),第二个事务的 UPDATE 语句失败。


清单 8. DB2 返回的锁超时错误

SQL0911N  The current transaction has been rolled back because of a deadlock or timeout
    Reason code "68".  SQLSTATE=40001
						

锁超时事件的信息被写入非格式化表 EMDATA.TAB_LOCKING 中:执行 CREATE EVENT MONITOR 语句时所指定的。为了读取并格式化锁监控器收集的信息,使用名为 db2evmonfmt 的工具,它是用 Java 编写的。在第一次使用前,必须先编译。可以在 DB2 安装目录的 samples 子目录找到该工具的源代码(包括相应 XML 表单的样式表)。在编译 Java 源代码之前,将两个文件(源代码 + 样式表)复制到当前工作目录,如清单 9 所示。


清单 9. 复制 db2evmonfmt 工具的源文件

copy "C:\Program Files\IBM\SQLLIB\samples\java\jdbc\db2evmonfmt.java" .
copy "C:\Program Files\IBM\SQLLIB\samples\java\jdbc\DB2EvmonLocking.xsl" .
						

需要 JDK (Java Development Kit) 来编译 db2evmonfmt 工具。由于 JDK 是随每个 DB2 服务器产品安装的,可以使用 DB2 安装程序的 Java 编译器(javac)。为了让操作系统找到 Java 编译器,javac 二进制文件必须在调用前包含在 PATH 变量中,如清单 10 所示。


清单 10. 编译 db2evmonfmt 工具

set PATH=C:\Program Files\IBM\SQLLIB\java\jdk\bin;%PATH%
javac db2evmonfmt.java
						

为了读取和格式化锁超时事件的信息,根据选项调用 db2evmonfmt 工具,如清单 11 所示。默认情况下,工具输出写到标准输出,所以将其输出重新指向文本文件。


清单 11. 调用 db2evmonfmt 工具来格式化为锁超时事件收集的数据

java db2evmonfmt -d sample -ue emdata.tab_locking -ftext -u username -p password
    >locktimeout.txt
						

其中的代码选项如下:

-d 数据库名 -ue 非格式化事件表的完全许可路径(包括模式) -ftext 纯文本格式(或者,通过指定 -fxml 选项设置 XML 格式)的锁事件信息输出 -u 数据库访问的用户 ID -p 数据库访问的密码

对于锁超时事件,db2evmonfmt 生成如清单 12 所示的输出。


清单 12. 锁超时事件的 db2evmonfmt 输出

-------------------------------------------------------
Event ID               : 1
Event Type             : LOCKTIMEOUT
Event Timestamp        : 2010-02-16-18.27.38.102302
Partition of detection : 0
-------------------------------------------------------

Participant No 1 requesting lock 
----------------------------------
Lock Name            : 0x02000600040000000000000052
Lock wait start time : 2010-02-16-18.27.28.086228
Lock wait end time   : 2010-02-16-18.27.38.102302
Lock Type            : ROW
Lock Specifics       : ROWID=4,DATA_PARTITION_ID=0,PAGEID=0
Lock Attributes      : 00000000
Lock mode requested  : Update
Lock mode held       : Exclusive
Lock Count           : 1
Lock Hold Count      : 0
Lock rrIID           : 0
Lock Status          : Waiting
Lock release flags   : 40000000
Tablespace TID       : 2
Tablespace Name      : USERSPACE1
Table FID            : 6
Table Schema         : FECHNER 
Table Name           : EMPLOYEE


Attributes            Requester                       Owner                           
--------------------- ------------------------------  ------------------------------  
Participant No        1                               2                               
Application Handle    0342                            0333                            
Application ID        *LOCAL.DB2.100216172719         *LOCAL.DB2.100216172702         
Application Name      db2bp.exe                       db2bp.exe                       
Authentication ID     FECHNER                         FECHNER                         
Requesting AgentID    2172                            6320                            
Coordinating AgentID  2172                            6320                            
Agent Status          UOW Executing                   UOW Waiting                     
Application Action    No action                       No action                       
Lock timeout value    10                              0                               
Lock wait value       0                               0                               
Workload ID           1                               1                               
Workload Name         SYSDEFAULTUSERWORKLOAD          SYSDEFAULTUSERWORKLOAD          
Service subclass ID   13                              13                              
Service subclass      SYSDEFAULTSUBCLASS              SYSDEFAULTSUBCLASS              
Current Request       Execute Immediate               Close Cursor                    
TEntry state          1                               2                               
TEntry flags1         00000000                        00000000                        
TEntry flags2         00000200                        00000200                        
Lock escalation       no                              no                              
Client userid                                                                         
Client wrkstnname                                                                     
Client applname                                                                       
Client acctng                                                                         


Current Activities of Participant No 1
----------------------------------------
Activity ID        : 1
Uow ID             : 1
Package Name       : SQLC2H20
Package Schema     : NULLID  
Package Version    : 
Package Token      : AAAAAZBZ
Package Sectno     : 203
Reopt value        : none
Incremental Bind   : no
Eff isolation      : CS
Eff degree         : 0
Eff locktimeout    : 10
Stmt unicode       : no
Stmt query ID      : 0
Stmt nesting level : 0
Stmt invocation ID : 0
Stmt source ID     : 0
Stmt pkgcache ID   : 3783866187777
Stmt type          : Dynamic
Stmt operation     : DML, Insert/Update/Delete
Stmt text          : UPDATE EMPLOYEE SET BONUS = SALARY * 0.1 WHERE JOB = 'MANAGER'



Past Activities of Participant No 1
-------------------------------------
Activities not available


Current Activities of Participant No 2
----------------------------------------
Activities not available


Past Activities of Participant No 2
-------------------------------------
Past Activities wrapped: no

Activity ID        : 2
Uow ID             : 2
Package Name       : SQLC2H20
Package Schema     : NULLID  
Package Version    : 
Package Token      : AAAAAZBZ
Package Sectno     : 201
Reopt value        : none
Incremental Bind   : no
Eff isolation      : CS
Eff degree         : 0
Eff locktimeout    : 10
Stmt unicode       : no
Stmt query ID      : 0
Stmt nesting level : 0
Stmt invocation ID : 0
Stmt source ID     : 0
Stmt pkgcache ID   : 721554505729
Stmt type          : Dynamic
Stmt operation     : DML, Select (blockable)
Stmt text          : SELECT LASTNAME, FIRSTNME, SALARY FROM EMPLOYEE ORDER BY LASTNAME ASC

Activity ID        : 1
Uow ID             : 2
Package Name       : SQLC2H20
Package Schema     : NULLID  
Package Version    : 
Package Token      : AAAAAZBZ
Package Sectno     : 203
Reopt value        : none
Incremental Bind   : no
Eff isolation      : CS
Eff degree         : 0
Eff locktimeout    : 10
Stmt unicode       : no
Stmt query ID      : 0
Stmt nesting level : 0
Stmt invocation ID : 0
Stmt source ID     : 0
Stmt pkgcache ID   : 3835405795329
Stmt type          : Dynamic
Stmt operation     : DML, Insert/Update/Delete
Stmt text          : UPDATE EMPLOYEE SET SALARY = SALARY * 1.02
						

输出包含所有用来确定锁超时事件原因的信息,包括:

  • 参与锁超时事件的应用程序通用信息,如应用程序名、认证 ID 等等。
  • 等待应用程序请求的锁信息,如行或表锁、共享或独占锁、表名等等。
  • 阻塞的 SQL 语句信息。
  • 在参与事务中的锁超时事件前执行的所有 SQL 语句信息,如语句文本、使用的隔离级、执行顺序等等。

事件监控器不止收集参与事务中最后执行的 SQL 语句。这有助于锁分析,因为这些语句可能不是并发问题的原因。例如,不是 SELECT 语句造成产生问题的锁,但 UPDATE 语句恰好在同一事务中在 SELECT 语句前执行。只有在指定 ALTER WORKLOAD...COLLECT LOCK TIMEOUT DATA 语句的 WITH HISTORY 选项后才收集之前 SQL 语句的信息。

确定引起锁超时事件的原因后,停止收集默认工作负载的锁超时信息,如清单 13 所示。


清单 13. 停止默认用户工作负载的锁超时数据收集

db2 "ALTER WORKLOAD SYSDEFAULTUSERWORKLOAD COLLECT LOCK TIMEOUT DATA NONE"
						

为了准备下一个示例场景,将 DB CFG 参数 LOCKTIMEOUT 重新设置为 -1,这意味着锁超时不再发生,因为一个事务可以无限等待另一个事务释放所需的锁。由于 LOCKTIMEOUT 参数不可在线调整,需要停用并重新激活数据库,以使更改起作用,如清单 14 所示。


清单 14. 重置数据库 LOCKTIMEOUT 设置

db2 "TERMINATE"
db2 "DEACTIVATE DB SAMPLE"
db2 "UPDATE DB CFG FOR SAMPLE USING LOCKTIMEOUT -1"
db2 "ACTIVATE DB SAMPLE"
						

收集整个数据库的死锁事件数据

可以设置锁事件监控器来收集某个工作负载或整个数据库的锁事件信息。前一个例子演示了如何收集单个工作负载的锁超时事件信息。本例中,将看一看如何配置锁事件监控器以让其收集整个数据库的死锁事件。无论收集的锁事件数据是何种级别(工作负载或数据库),只有当锁事件监控器激活时才收集锁事件数据。

通过 DB CFG 参数 MON_DEADLOCK 来激活收集整个数据库的死锁事件信息(锁超时和锁等待分别对应的是 MON_TIMEOUT 和 MON_LOCKWAIT)。默认情况下,MON_DEADLOCK 值设置为 WITHOUT_HIST,这意味着锁事件监控器已经收集死锁事件的信息,但不包括历史数据。如果想要收集历史数据,将参数值更新为 HISTORY。与 LOCKTIMEOUT 参数相比,MON_DEADLOCK 可以在线配置,这意味着没必要停用或激活数据库。尽管如此,要在线改变 DB CFG 参数,对数据库的连接是强制性的,而且 UPDATE DB CFG 命令必须包含 IMMEDIATE 选项,如清单 15 所示。


清单 15. 在数据库级配置死锁信息收集

db2 "CONNECT TO SAMPLE"
db2 "UPDATE DB CFG USING MON_DEADLOCK HISTORY IMMEDIATE"
						

下一步,在最终将导致死锁的各会话中执行一系列 SQL 语句。在会话中,试着同时更新 DEPARTMENT 表中的位置数据和部门名称。在第一个会话中,执行清单 16 中的 UPDATE 语句,它对部门号为 B01 的部门行设置独占锁。


清单 16. 第一个事务:更新某个部门的位置数据

db2 "CONNECT TO SAMPLE"
db2 +c "UPDATE DEPARTMENT SET LOCATION = 'New York' WHERE DEPTNO = 'B01'"
						

在第二个会话中,更新部门号为 E11 的行,然后试着更新部门号为 B01 的行,如清单 17 所示。


清单 17. 第二个事务:更新某个部门的名称

db2 "CONNECT TO SAMPLE"
db2 +c "UPDATE DEPARTMENT SET DEPTNAME = 'OPERATIONS 1' WHERE DEPTNO = 'E11'"
db2 +c "UPDATE DEPARTMENT SET DEPTNAME = 'PLANNING 1' WHERE DEPTNO = 'B01'"
						

第二个会话中的 UPDATE 语句被第一个会话中的事务所持有的独占锁阻塞,因此它必须等待。现在在第一个会话中执行一个试图改变被第二个会话事务阻塞的行(E11 部门的行)的 UPDATE 语句。数据库识别出死锁事件。


清单 18. 第一个事务:更新另一个部门的位置信息

db2 +c "UPDATE DEPARTMENT SET LOCATION = 'Los Angeles' WHERE DEPTNO = 'E11'"
						

数据库管理器自动回滚其中一个事务,第一个会话中的或第二个会话中的。出错的事务的 UPDATE 语句返回相应错误信息,如清单 19 所示。


清单 19. DB2 返回的死锁错误

SQL0911N  The current transaction has been rolled back because of a deadlock or timeout.
    Reason code "2".  SQLSTATE=40001
						

为了格式化锁事件监控器收集的死锁事件数据,并将其写到普通文本文件中,再次调用 db2evmonfmt 工具。由于第一个例子已编译过源代码,db2evmonfmt Java 类文件已存在。这一次,为限制工具输出死锁事件,将附加选项 -type 的值设置为 deadlock,如清单 20 所示。


清单 20. 调用 db2evmonfmt 工具来格式化为死锁事件收集的数据

java db2evmonfmt -d sample -ue emdata.tab_locking -type deadlock -ftext
    -u username -p password >deadlock.txt
						

db2evmonfmt 的输出格式几乎与第一个例子中所描述的格式一致。根据应用程序、锁和 SQL 语句有关信息,可以轻松确定死锁事件的原因,如清单 21 所示。


清单 21. 死锁事件的 db2evmonfmt 输出

-------------------------------------------------------
Event ID               : 1
Event Type             : DEADLOCK
Event Timestamp        : 2010-02-21-19.25.32.723805
Partition of detection : 0
-------------------------------------------------------

Deadlock Graph
--------------
Total number of deadlock participants : 2
Participant that was rolled back      : 2
Type of deadlock                      : local

Participant     Participant     Deadlock Member Application Handle 
Requesting Lock Holding Lock                                  
--------------- --------------- --------------- ------------------ 
1               2               0               044             
2               1               0               024             


Participant No 1 requesting lock 
----------------------------------
Lock Name            : 0x020005000B0000000000000052
Lock wait start time : 2010-02-21-19.25.26.208252
Lock wait end time   : 2010-02-21-19.25.32.723805
Lock Type            : ROW
Lock Specifics       : ROWID=11,DATA_PARTITION_ID=0,PAGEID=0
Lock Attributes      : 00000000
Lock mode requested  : Exclusive
Lock mode held       : Exclusive
Lock Count           : 1
Lock Hold Count      : 0
Lock rrIID           : 0
Lock Status          : Waiting
Lock release flags   : 40000000
Tablespace TID       : 2
Tablespace Name      : USERSPACE1
Table FID            : 5
Table Schema         : FECHNER 
Table Name           : DEPARTMENT

Participant No 2 requesting lock 
----------------------------------
Lock Name            : 0x02000500050000000000000052
Lock wait start time : 2010-02-21-19.25.13.381517
Lock wait end time   : 2010-02-21-19.25.32.723805
Lock Type            : ROW
Lock Specifics       : ROWID=5,DATA_PARTITION_ID=0,PAGEID=0
Lock Attributes      : 00000000
Lock mode requested  : Exclusive
Lock mode held       : Exclusive
Lock Count           : 1
Lock Hold Count      : 0
Lock rrIID           : 0
Lock Status          : Waiting
Lock release flags   : 40000000
Tablespace TID       : 2
Tablespace Name      : USERSPACE1
Table FID            : 5
Table Schema         : FECHNER 
Table Name           : DEPARTMENT


Attributes            Requester                       Requester                       
--------------------- ------------------------------  ------------------------------  
Participant No        1                               2                               
Application Handle    024                             044                             
Application ID        *LOCAL.DB2.100221182012         *LOCAL.DB2.100221182513         
Application Name      db2bp.exe                       db2bp.exe                       
Authentication ID     FECHNER                         FECHNER                         
Requesting AgentID    4148                            1016                            
Coordinating AgentID  4148                            1016                            
Agent Status          UOW Executing                   UOW Executing                   
Application Action    No action                       No action                       
Lock timeout value    0                               0                               
Lock wait value       0                               0                               
Workload ID           1                               1                               
Workload Name         SYSDEFAULTUSERWORKLOAD          SYSDEFAULTUSERWORKLOAD          
Service subclass ID   13                              13                              
Service subclass      SYSDEFAULTSUBCLASS              SYSDEFAULTSUBCLASS              
Current Request       Execute Immediate               Execute Immediate               
TEntry state          2                               2                               
TEntry flags1         00000000                        00000000                        
TEntry flags2         00000200                        00000200                        
Lock escalation       no                              no                              
Client userid                                                                         
Client wrkstnname                                                                     
Client applname                                                                       
Client acctng                                                                         


Current Activities of Participant No 1
----------------------------------------
Activity ID        : 2
Uow ID             : 4
Package Name       : SQLC2H20
Package Schema     : NULLID  
Package Version    : 
Package Token      : AAAAAZBZ
Package Sectno     : 203
Reopt value        : none
Incremental Bind   : no
Eff isolation      : CS
Eff degree         : 0
Eff locktimeout    : -1
Stmt unicode       : no
Stmt query ID      : 0
Stmt nesting level : 0
Stmt invocation ID : 0
Stmt source ID     : 0
Stmt pkgcache ID   : 631360192513
Stmt type          : Dynamic
Stmt operation     : DML, Insert/Update/Delete
Stmt text          : UPDATE DEPARTMENT SET LOCATION = 'Los Angeles' WHERE DEPTNO = 'E11'



Past Activities of Participant No 1
-------------------------------------
Past Activities wrapped: no

Activity ID        : 1
Uow ID             : 4
Package Name       : SQLC2H20
Package Schema     : NULLID  
Package Version    : 
Package Token      : AAAAAZBZ
Package Sectno     : 203
Reopt value        : none
Incremental Bind   : no
Eff isolation      : CS
Eff degree         : 0
Eff locktimeout    : -1
Stmt unicode       : no
Stmt query ID      : 0
Stmt nesting level : 0
Stmt invocation ID : 0
Stmt source ID     : 0
Stmt pkgcache ID   : 2791728742402
Stmt type          : Dynamic
Stmt operation     : DML, Insert/Update/Delete
Stmt text          : UPDATE DEPARTMENT SET LOCATION = 'New York' WHERE DEPTNO = 'B01'



Current Activities of Participant No 2
----------------------------------------
Activity ID        : 2
Uow ID             : 1
Package Name       : SQLC2H20
Package Schema     : NULLID  
Package Version    : 
Package Token      : AAAAAZBZ
Package Sectno     : 203
Reopt value        : none
Incremental Bind   : no
Eff isolation      : CS
Eff degree         : 0
Eff locktimeout    : -1
Stmt unicode       : no
Stmt query ID      : 0
Stmt nesting level : 0
Stmt invocation ID : 0
Stmt source ID     : 0
Stmt pkgcache ID   : 4380866641921
Stmt type          : Dynamic
Stmt operation     : DML, Insert/Update/Delete
Stmt text          : UPDATE DEPARTMENT SET DEPTNAME = 'PLANNING 1' WHERE DEPTNO = 'B01'



Past Activities of Participant No 2
-------------------------------------
Past Activities wrapped: no

Activity ID        : 1
Uow ID             : 1
Package Name       : SQLC2H20
Package Schema     : NULLID  
Package Version    : 
Package Token      : AAAAAZBZ
Package Sectno     : 203
Reopt value        : none
Incremental Bind   : no
Eff isolation      : CS
Eff degree         : 0
Eff locktimeout    : -1
Stmt unicode       : no
Stmt query ID      : 0
Stmt nesting level : 0
Stmt invocation ID : 0
Stmt source ID     : 0
Stmt pkgcache ID   : 3173980831746
Stmt type          : Dynamic
Stmt operation     : DML, Insert/Update/Delete
Stmt text          : UPDATE DEPARTMENT SET DEPTNAME = 'OPERATIONS 1' WHERE DEPTNO = 'E11'
						

删除锁事件监控器

不再需要锁事件监控器时,可以将其停用并删除。如果需要锁事件监控器来分析可能的并发性问题,就只需将其停用。删除锁事件监控器不会隐式删除对应的非格式化事件表。如果不需要保留所收集的锁事件数据用作将来的分析,必须使用 DROP TABLE 语句手动删除非格式化事件表,如清单 22 所示。


清单 22. 删除锁事件监控器

db2 "SET EVENT MONITOR EVMON_LOCKING STATE 0"
db2 "DROP EVENT MONITOR EVMON_LOCKING"
db2 "DROP TABLE EMDATA.TAB_LOCKING"
						

结束语

本文介绍了如何使用 DB2 LUW 9.7 中引入的新的锁事件监控器。本文通过实例演示了如何使用锁事件监控器来收集所有种类的并发性问题:死锁、锁超时及锁等待。使用新的格式化工具 db2evmonfmt,收集的锁事件信息可以通过这种方式格式化,让确认某种锁问题的原因变得更简单。DB2 LUW 9.7 提供了一种集成方式来分析所有种类的并发性问题,它也取代了以前 DB2 LUW 发行版中使用的锁分析的方法。

原文链接:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1004lockeventmonitor/index.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15082138/viewspace-671079/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15082138/viewspace-671079/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值