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

DB2 鎖問題完整診斷指南:參數調優、快照監控、事件監視器與死結/等待分析

     編輯:DB2 教學

鎖問題分類與本質

  • 死結:多交易循環等待對方持有的鎖,屬**應用邏輯/並發設計缺陷**,需調整存取順序、縮短交易、降低隔離級別。
  • 鎖等待:正常並發控制行為,屬**效能問題**,需優化 SQL、索引、鎖粒度、提交頻率。

兩者皆可透過參數調整緩解,但根治需回歸應用層面。

核心配置參數

參數單位含義建議設定
DLCHKTIME毫秒死結檢測間隔預設 10000 (10秒);設小於 LOCKTIMEOUT
LOCKTIMEOUT秒鎖等待最長時間,-1=無限等待必須設 >0 (如 30~60),避免永久阻塞
LOCKLIST4KB 頁鎖清單記憶體上限視併發量調大,防止鎖升級過早
MAXLOCKS%單應用佔用鎖清單上限觸發升級預設 10%,高併發可調 20~50%

# 修改範例
db2 update db cfg using LOCKTIMEOUT 30
db2 update db cfg using DLCHKTIME 5000

即時並發檢視


db2 list applications
db2 list applications show detail
db2 list applications for database sample show detail

重點欄位:Application Name (db2bp=CLP, java=CC/自訂)、Application ID (LOCAL+用戶+時間 或 16進位IP+用戶+時間),快速識別阻塞源頭。

監視器開關與快照分析

啟用必要開關


db2 update monitor switches using LOCK ON STATEMENT ON
# 視需求可加 TABLE, UOW, BUFFERPOOL, SORT

關鍵快照命令

命令用途
db2 get snapshot for locks on sample全庫鎖快照:持有者、請求者、模式、物件、等待時間
db2 get snapshot for locks on sample for application agentid <appl_id>單應用鎖詳情
db2 get snapshot for dynamic sql on sample動態 SQL 文本、執行統計、鎖關聯
db2 get snapshot for applications on sample應用層級:UOW、鎖等待、死結計數

事件監視器:歷史深度分析

快照為即時切片,事件監視器記錄完整生命週期,適合事後根因分析。

建立與啟用


-- 建立監視死結與語句事件
CREATE EVENT MONITOR evm_lock FOR DEADLOCKS, STATEMENTS
WRITE TO FILE 'C:\db2events\lock_evt';

-- 啟用
SET EVENT MONITOR evm_lock STATE 1;
  • DEADLOCKS:僅記錄死結發生時的受害者/倖存者鎖圖。
  • DEADLOCKS WITH DETAILS:包含完整 SQL 文本、鎖屬性 (較大)。
  • STATEMENTS:記錄每條 SQL 執行起訖、耗時、鎖等待。

產生報告


db2evmon -path 'C:\db2events\lock_evt' > lock_report.txt

報告將顯示死結循環鏈、受害者選擇依據 (通常回滾成本最低)、完整 SQL 文本與執行計畫片段。

診斷工作流建議

  1. 確認狀:應用報錯 SQL0911N (死結/逾時) 或回應變慢。
  2. 檢查參數:LOCKTIMEOUT 是否合理、DLCHKTIME < LOCKTIMEOUT。
  3. 即時快照:get snapshot for locks 找出阻塞鏈頭 (持有鎖最久、無等待者)。
  4. 關聯 SQL:用 agentid 查 dynamic sql 快照,定位具體陳述式。
  5. 事件監視器:若問題間歇性,部署事件監視器收集 24h 數據離線分析。
  6. 應用層優化:調整索引、縮短交易、固定存取順序、降低隔離級別 (CS/UR)、考慮樂觀鎖。

參考資源

  • IBM Redbook: DB2 UDB Performance Tuning Guide
  • Knowledge Center: System Monitor Guide and Reference
  • 命令參考: db2pd -locks (更輕量的鎖診斷工具)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved