常見的鎖問題包括:
鎖等待
鎖超時
鎖升級
死鎖
而根據問題的特性通常分為兩種:
實時事件:問題正在發生
歷史事件:問題已經過去
如果實時事件,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