在DB29.7之前:
(1)创建死锁监控器:
1. cd /home/db2inst1
2. mkdir deadlock
3. db2 connect to db1
4. 创建deadlock事件监控器
db2 "create event monitor dlockevm for deadlockswith details history write to file '/home/db2inst1/deadlock' “
5.开启事件监控器
db2 set event monitor dlockevm state=1
(2)发生死锁情况。或者模拟一个死锁。
(3)死锁结果分析
1. db2 flush event monitor dlockevm
2. 关闭事件监听器:
db2 set event monitor dlockevm state=0
3. 监听文件产生:
ls –l
0000000.evt db2event.ct1
4.
db2evmon –path /home/db2inst1/deadlock > deadlock.txt
打开文件deadlock.txt
在DB29.7之后(包括9.7):
9.7引入了新的锁事件监控器 ,
• 用同一个锁事件监控器就可捕获死锁、锁超时和锁等待
• 采用UE表存取锁事件结果,使得分析更简单
• 锁事件监控器的使用包含三个步骤:
• 1. 创建锁事件监控器
• 2. 设置数据收集的类型和级别
• 3. 格式化并分析数据
步骤:
1. 修改db cfg参数:
Lock timeoutevents (MON_LOCKTIMEOUT) = NONE
Deadlockevents (MON_DEADLOCK) = WITHOUT_HIST
Lock waitevents (MON_LOCKWAIT) = NONE
Lock wait eventthreshold (MON_LW_THRESH) =4294967295
(为了简化,此处将前三个都设置为HIST_VALUES)
(1) 捕获死锁事件
db2 update db cfg using mon_deadlockhist_and_values
(2) 捕获锁超时事件
db2 update dbcfg using mon_locktimeout hist_and_values
(3) 捕获锁等待事件
db2 update dbcfg using mon_lw_thresh 5000000
db2 update dbcfg using mon_lockwait hist_and_values
2. create event monitor lockevmon for locking writeto unformatted event table (table locks)
3. setevent monitor lockevmon state=1
4. 发生死锁情况。或者模拟一个死锁。
5. 解析,方法一: Java程序(要先编译,参考徐P264)
~> ~/sqllib/java/jdk32/jre/bin/java db2evmonfmt –d sample –ue locks –ftext –udb2inst1 –p password>db2locks.out
6. 解析,方法二: 存储过程
call EVMON_FORMAT_UE_TO_TABLES(
'LOCKING',NULL,NULL,NULL,NULL,NULL,'RECREATE_FORCE',-1,'select * from locks order by event_timestamp‘ )
结果如:
7.
8.
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论