| 類型 | 特性 | 適用場景 |
|---|---|---|
| 快照監控器 | 時間點切面,即時狀態 | 當前連線、等待鎖、活動 SQL、緩衝區使用率 |
| 事件監控器 | 持續記錄歷史事件,不遺漏 | 死結追蹤、趨勢分析、事後審計 |
死結發生時間不可預測,**事件監控器是必備工具**。
DEADLOCKS:記錄基本應用資訊,開銷小DEADLOCKS WITH DETAILS:含完整 SQL 文本、鎖鏈、應用上下文,**開銷較大**
db2 connect to sample
db2 "create event monitor dlmon for deadlocks with details write to file 'C:\dlmon'"
mkdir C:\dlmon
db2 "set event monitor dlmon state 1"
-- Session A
db2 connect to sample
db2 +c "insert into employee values('000350','Truman','I','Jiang','B00','5892','1999-02-21','Engineer',19,'M','1978-06-17',60000,2000,6000)"
-- 持有 EMPLOYEE 列排他鎖
-- Session B
db2 connect to sample
db2 +c "insert into project values('AD3300','Dead Lock Monitor','B00','000350',7.00,'1982-07-21','1983-02-03','AD3111')"
-- 持有 PROJECT 列排他鎖
-- Session A
db2 +c "select projname from project" -- 等待 PROJECT 共享鎖
-- Session B
db2 +c "select firstnme from employee" -- 等待 EMPLOYEE 共享鎖
-- ★ 死結形成
+c 關閉自動提交,維持鎖持有。
超過 DLCHKTIME 後,死結偵測器選擇工作量較小者回滾 (SQL0911N reason code 2),另一會話繼續執行。
db2 connect reset
db2evmon -path C:\dlmon > C:\dlmon\deadlock_log.txt
| 欄位 | 含義 | 範例值 |
|---|---|---|
| Deadlock ID | 死結事件序號 | 1 |
| Appl Handle | 應用程式控制代碼 | 949 |
| Participant no. | 參與者編號 | 1, 2 |
| Table of lock waited on | 等待鎖的表 | EMPLOYEE |
| Type of lock | 鎖粒度 | Row |
| Mode of lock | 持有鎖模式 | X (排他) |
| Mode application requested | 請求鎖模式 | NS (共享+Next Key) |
| Text | 觸發請求的 SQL | select name from employee |
| Locks Held | 當前持有鎖清單 | 含 PROJECT X 鎖、EMPLOYEE IS 鎖 |
insert into employee)LOCKLIST、MAXLOCKS,監控 Lock escalation 事件ROLLBACK,釋放所有鎖事件監控器 + db2evmon 解析 = 死結可視化。結合日誌分析定位熱點 SQL 與事務模式,配合上述六大策略,可將死結發生率壓至極低。