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

DB2 鎖死排查實戰:監視開關、快照與表函數三步走

     編輯:DB2 教學

問題背景

互動式查詢(如命令中心)會對讀取列加 S 鎖(共享鎖),若同一時間另一 Session 要 UPDATE 需 X 鎖(排他鎖),便會陷入鎖等待甚至死結。快速定位持有鎖與等待鎖的應用程式,是解決鎖爭用的關鍵。

三步排查標準流程

步驟 1:開啟鎖監視開關

db2 update dbm cfg using dft_mon_lock on

此為資料庫管理員層級設定,影響所有新連線;生效即刻,無需重啟實例。

步驟 2:擷取鎖快照

db2 get snapshot for locks on  > snap.log

輸出包含:tables、bufferpools、tablespaces、database 等鎖資訊。重點關注 List of Locks 區塊,依 Application handle 即可對應具體應用程式。

步驟 3:關閉監視(節省資源)

db2 update dbm cfg using dft_mon_lock off

替代方案:使用監視器開關 + 表函數

若不想動態修改 dbm cfg,可用 Session 級開關:

db2 update monitor switches using lock on
db2 get snapshot for locks on SAMPLE

或直接查詢系統表函數(無需開關,效能較佳):

SELECT * FROM TABLE(SNAPSHOT_LOCK('dbname', -1)) AS LOCK

搭配 APPLICATION_HANDLE 即可鎖定問題 Session。

快照關鍵欄位速查

欄位含義
LOCK_OBJECT_TYPEROW / TABLE / INDEX KEY / BLOCK (MDC)
LOCK_MODES / X / U / IS / IX / SIX / IN / Z / NW
LOCK_STATUSGRANTED(持有) / WAITING(等待)
APPLICATION_HANDLE對應應用程式唯一代碼
TABLE_SCHEMA / TABLE_NAME被鎖定物件

進階:強制釋放鎖定

確認阻塞應用程式後,可用:

db2 force application ()

謹慎使用,會導致該應用程式事務回滾。

小結

「開關 → 快照 → 關閉」三步走,配合 SNAPSHOT_LOCK 表函數隨時查詢,構成 DB2 鎖爭用排查的標準動作。建議將此流程寫入運維手冊,並定期演練。

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