DB2 for Linux, UNIX, and Windows 的锁事件,第 3 部分: 使用 DB2 9.7 中的锁事件监控器来解决并发性问题
2010-08-03 00:00:00 来源:WEB开发网通过 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'"
更多精彩
赞助商链接