首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 UDB 死結監控實戰:事件監控器完整部署、日誌分析與六大避免策略

     編輯:DB2 教學

監控器選型:快照 vs 事件

類型特性適用場景
快照監控器時間點切面,即時狀態當前連線、等待鎖、活動 SQL、緩衝區使用率
事件監控器持續記錄歷史事件,不遺漏死結追蹤、趨勢分析、事後審計

死結發生時間不可預測,**事件監控器是必備工具**。

死結相關事件類型

  • DEADLOCKS:記錄基本應用資訊,開銷小
  • DEADLOCKS WITH DETAILS:含完整 SQL 文本、鎖鏈、應用上下文,**開銷較大**

完整部署與觸發實驗

1. 建立事件監控器


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"

2. 兩會話製造死結


-- 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 關閉自動提交,維持鎖持有。

3. 死結檢測與回滾

超過 DLCHKTIME 後,死結偵測器選擇工作量較小者回滾 (SQL0911N reason code 2),另一會話繼續執行。

4. 匯出日誌分析


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觸發請求的 SQLselect name from employee
Locks Held當前持有鎖清單含 PROJECT X 鎖、EMPLOYEE IS 鎖

根因分析邏輯

  1. 識別死結表與鎖模式 (如 EMPLOYEE 表 X 鎖上請求 S 鎖)
  2. 定位持有衝突鎖的 SQL (如 insert into employee)
  3. 判斷事務過長原因:
    • 應用層:大迴圈、遠端呼叫、無謂 SELECT
    • 資料層:缺索引、統計過舊、鎖升級 (LOCKLIST/MAXLOCKS)

六大避免死結策略

  1. 正確設定隔離級別 (RR/RS/CS/UR),依業務完整性需求選擇,CS 為預設平衡點
  2. 避免鎖升級:調大 LOCKLIST、MAXLOCKS,監控 Lock escalation 事件
  3. 縮短事務長度:盡早 COMMIT,移除事務內長耗時邏輯 (迴圈、RPC、無用查詢)
  4. 錯誤即回滾框架:應用架構層面保證 SQL 錯誤即 ROLLBACK,釋放所有鎖
  5. 統一資源存取順序:多程式存取同組表時,遵循固定順序 (如先 EMPLOYEE 後 PROJECT)
  6. 外鍵建立索引:刪除父表列時需掃描子表,FK 索引可避免全表掃描與大量鎖獲取

結語

事件監控器 + db2evmon 解析 = 死結可視化。結合日誌分析定位熱點 SQL 與事務模式,配合上述六大策略,可將死結發生率壓至極低。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved