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

快速掌握 DB2 表死鎖檢測:監控開關啟用與快照查詢兩步走實戰法

     編輯:DB2 教學

問題

如何即時查看資料庫當前的表/列級死鎖與鎖等待狀況?

標準兩步驟解法

步驟 1:啟用鎖監控開關

db2 UPDATE MONITOR SWITCHES USING LOCK ON
  • 預設鎖開關為 OFF,不開啟無法收集鎖快照資料。
  • 建議在實例啟動腳本或資料庫激活時永久開啟:db2 UPDATE MONITOR SWITCHES USING LOCK ON, TABLE ON, STATEMENT ON, BUFFERPOOL ON, SORT ON, UOW ON。

步驟 2:執行鎖快照查詢

db2 GET SNAPSHOT FOR LOCKS ON <database_name>
  • 輸出包含:所有連接應用程式代理編號、各連接持有的鎖模式(S/X/IS/IX/NS/NX/...)、鎖狀態、鎖物體(表/列/頁)、等待者/持有者關係。
  • 若輸出過長,可導向檔案:db2 GET SNAPSHOT FOR LOCKS ON dbname > locksnap.txt。

輸出關鍵欄位解讀

欄位含義死鎖分析重點
Agent ID / Appl Handle應用程式代理編號識別死鎖參與者
Lock Name鎖資源標識(表/頁/列)找出爭用熱點物體
Lock ModeS (Share)、X (Exclusive)、IS、IX、U 等X-X 或 X-S 衝突最嚴重
Lock StatusGranted / Waiting / ConvertingWaiting = 正在等待,Converting = 升級中
Lock Escalation是否已升級為表鎖頻繁升級 = 鎖清單不足

進階:事件監控器捕捉死鎖歷史

快照僅顯示「當下」狀態。若需事後分析死鎖發生時間、參與 SQL、受害者選擇,需建立死鎖事件監控器:

db2 CREATE EVENT MONITOR DEADLOCK FOR DEADLOCKS WRITE TO FILE '/home/db2inst1/deadlock_evm'
db2 SET EVENT MONITOR DEADLOCK STATE 1
# 事發後
db2 EVMON_FORMAT_UE_TO_TABLE -evm DEADLOCK -db dbname
# 查詢格式化表 DEADLOCKS, DLCONN, DLLOCK, DLSTM

常見死鎖預防模式

  1. 固定存取順序:所有事務以相同順序存取表(如按表名字母序)。
  2. 縮短事務:盡早 COMMIT,減少持鎖時間。
  3. 適當索引:減少掃描範圍,降低鎖粒度。
  4. 避免長時間 SELECT 無 COMMIT:RS/CS 隔離級別下長查詢持有 S 鎖阻塞 X 鎖。
  5. LOCKTIMEOUT 設 10-15 秒:防止無限等待雪崩。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved