文档介绍:DB2锁问题处理最佳实践
徐明伟
北京普远天成科技有限公司技术总监
2012
议题
1 DB2锁概述
2 DB2锁问题监控和定位
3 DB2锁问题调优
4 DB2
5 DB2锁案例分享
2012
2
为什么需要锁
•一致性机制
–事务
–日志
–锁
–隔离级别
•锁
–维护数据一致性
–控制并发性
•锁分类
–锁的对象(表、行、表空间、索引)
–锁的模式(S,X等)
2012
3
锁导致问题/锁现象
•锁的几种现象
–锁等待
–锁超时
–死锁
–锁升级
–锁转换
•锁产生的问题
–系统运行慢
–应用回滚
2012
4
议题
1 DB2锁概述
2 DB2锁问题监控和定位
3 DB2锁问题调优
4 DB2
5 DB2锁案例分享
2012
5
锁问题监控和定位
•锁问题监控定位工具
Snapshot快照
deadlock event monitor with details history
db2pd ()
db2pdcfg ()
db2_capture_locktimeout ()
New Locking event monitor ()
•锁是症状,不是根源
2012
6
锁快照监控
•通过get snapshot for database on <db>
–死锁、锁等、锁超时、锁升级等统计信息
Database Snapshot
Database name = CRMDB
First database connect timestamp = 10/10/2011 20:50: 数据库连接时间
Snapshot timestamp = 03/07/2012 11:10: 快照时间
Locks held currently = 1
Lock waits = 471967 锁等数量
Time database waited on locks (ms) = 2039693347 发生锁等的时间
Lock list memory in use (Bytes) = 1740480
Deadlocks detected = 470 死锁数量
Lock escalations = 0
锁升级数量
Exclusive lock escalations = 0
Agents currently waiting on locks = 0
Lock Timeouts = 24782 锁超时数量
2012
7
db2pd监控锁等
• db2pd –d <db_name> -locks wait –tra –app –dyn
–定位引起锁等的事务、应用和动态语句
2012
8
db2pdcfg捕获锁超时()
• db2pd结合db2cos回调脚本捕获锁超时或死锁
•改写db2cos回调脚本
"LOCKTIMEOUT")
echo "Lock Timeout Caught" >> $logfile
if [ ! -n "$database" ]
then
db2pd -inst >> $logfile
else
db2pd -db $database -locks -tra -app -dyn >> $logfile
fi
;;
• db2pdcfg –catch locktimeout count=1
•当发生锁超时时,会调用db2cos脚本
2012
9
db2_capture_locktimeout捕获锁超时( fp4-)
•设置db2_capture_locktimeout注册变量
– db2set DB2_CAPTURE_LOCKTIMEOUT=ON
•创建死锁事件监控器
– db2 “create event monitor dlockevm for deadlocks with details history write to file
‘/home/db2inst1/locks’”
锁请求信息
请求锁模式
2012请求的SQL语句