常见的锁问题包括:
锁等待
锁超时
锁升级
死锁
而根据问题的特性通常分为两种:
实时事件:问题正在发生
历史事件:问题已经过去
如果实时事件,DBA 可以通过查看表信息、GET SNAPSHOT 或者 db2pd/db2top 查看数据库当前的锁状况;这毕竟少数,往往锁问题都是历史事件,应用通过查看日志才发现存在锁问题,这种情况下,需要数据库本身对锁事件进行监控,如果发生收集相关的信息,方便DBA去分析。
数据库版本 | 实时事件监控工具 | 历史事件监控工具 |
V9 之前的版本 | 表函数 SNAP_GET_LOCKWAIT/GET SNAPSHOT FOR LOCKS | db2cos |
V9.1 | 新增管理视图 SYSIBMADM. SNAPLOCKWAIT | db2cos |
V9.5 | db2cos | |
V9.7 | 事件监控/db2cos | |
通过事件监控抓取锁信息
配置方法
1. 创建事件监控(create event monitor)
1.1 创建bufferpool
1.2 创建临时表空间
1.3 创建事件监控
2. 配置数据库相关参数
事件监控类型 | 相关数据库参数 |
锁等待事件监控 | MON_LOCKWAIT,MON_LW_THRESH |
锁超时事件监控 | MON_LOCKTIMEOUT,LOCKTIMEOUT |
死锁事件监控 | MON_DEADLOCK,DLCHKTIME |
数据库参数 | 参数详解 |
MON_LOCKWAIT | 设置锁事件监控对锁信息收集的详细程度,值包括:NONE,WITHOUT_HIST, WITH_HIST,HIST_AND_VALUES; |
MON_LOCKTIMEOUT | 同MON_LOCKWAIT, 同时参数LOCKTIMEOUT |
MON_DEADLOCK | 同MON_LOCKWAIT |
MON_LW_THRESH | 设置锁等待发生的时间阀值,超过该值将会触发锁等待事件监控,单位微妙 |
参数配置命令:
db2 update db cfg using MON_LOCKTIMEOUT HIST_AND_VALUES
MON_DEADLOCK HIST_AND_VALUES MON_LOCKWAIT HIST_AND_VALUES
MON_LW_THRESH 5000000