jimmy
作者jimmy·2012-08-11 14:22
数据仓库工程师·招行软件中心

死锁监视器

字数 483阅读 2713评论 4赞 1
1 使用dbadmin权限用于登陆并连接数据库
 2 创建死锁日志保存路径
   mkdir /db2/dlmon
 3 创建死锁事件监控器
   db2 "create event monitor dlmon for deadlocks with details write to file '/db2/dlmon'"
 4 激活事件监控器
   db2 "set event monitor dlmon state 1"
 5 运行应用程序,模拟死锁测试
 6 关闭事件监控器
    db2 "set event monitor dlmon state 0"
 7 提取死锁日志
   db2evmon -path /db2/dlmon > /db2/dlmon/dllog.txt
 8 分析死锁日志
   cd /db2/dlmon
   more dllog.txt

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论4 条评论

jimmyjimmy数据仓库工程师招行软件中心
2012-08-11 14:23
非生产环境:
db2pd -d dbname -lock -wait会得到一个事物句柄
db2pd -d dbname -tra 事物句柄
会得到一个应用程序id
jimmyjimmy数据仓库工程师招行软件中心
2012-08-11 14:23
db2 get snapshot for application agentid 应用程序id
就可以看到是哪个语句造成的了
jimmyjimmy数据仓库工程师招行软件中心
2012-08-11 14:22
<dbpath>/NODE0000/SQL00001/db2event/db2detaildeadlock路径下提取下死锁的日志去
jimmyjimmy数据仓库工程师招行软件中心
2012-08-11 14:22
9.5方法:
#首先设置参数,并创建事件监控器
db2set DB2_CAPTURE_LOCKTIMEOUT=ON
db2 update db cfg for sample using locktimeout=15
db2stop force
db2start
db2 connect to sample

mkdir locks
db2 drop event monitor dlockevm
db2 "create event monitor dlockevm for deadlocks with details history write to file '/home2inst1/locks'"
db2 set event monitor dlockevm state=1

#模拟锁超时
在第一个窗口中执行
db2 +c "insert into t1 values('ffff','ffff')"
db2 +c "select * from t1 where coll='ffff'"

在第二个窗口中执行
db2 +c "select * from t1 where coll='xxxx'"
sql0911n the current transaction has been rooled back because of a deadlock or timeout.Reason code "68".sqlstate=40001

这时检查<instance_home>/sqllib2dump目录,发现生成了db2locktimeout.0.72****
这个文件包含两部分内容
一部分为锁请求相关信息,包含了锁超时的语句,申请的锁类型等。
另一部分为锁拥有者相关信息,包含了当前锁的模式,还包含当前事务所执行的所有sql语句历史信息。
以上是我的阅读笔记 仅供参考
Ctrl+Enter 发表

作者其他文章

相关问题

X社区推广