WEB开发网
开发学院数据库DB2 DB2 for Linux, UNIX, and Windows 的锁事件,第 ... 阅读

DB2 for Linux, UNIX, and Windows 的锁事件,第 3 部分: 使用 DB2 9.7 中的锁事件监控器来解决并发性问题

 2010-08-03 00:00:00 来源:WEB开发网   
核心提示: 一般来说,死锁或锁超时事件相关的数据集合应当在数据库级激活,DB2 for Linux, UNIX, and Windows 的锁事件,第 3 部分: 使用 DB2 9.7 中的锁事件监控器来解决并发性问题(3),因为这些事件通常是应用程序异常,因此,由于该事务未执行(自动执行已通过 DB2 C

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

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

本例中,使用锁事件监控器只收集某一工作负载的锁超时信息。简单起见,不要创建用户定义工作负载。相反使用 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" 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:DB for Linux

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接