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

DB2 鎖等待實戰排查:db2pd 定位應用、鎖、表、行四步法

     編輯:DB2 教學

場景複現

Session 1 更新 TACY_TEST 表 a=4 行持有 X 鎖未提交;Session 2 同行更新被掛起,狀態 Lock-wait。

四步定位法

步驟 1:識別等待應用

db2pd -db EOS -applications

輸出中 Status=Lock-wait 的應用句柄(AppHandl=8)即為受害者。

步驟 2:查看等待鎖詳情

db2pd -db EOS -locks showlock wait

關鍵輸出字段:

  • Type=Row、Mode=..X(排他鎖)
  • TbspaceID=2、TableID=1560、RecordID=0x2668007

步驟 3:解析表空間/表 ID 定位表名

db2 "SELECT TBSPACE, TABSCHEMA, TABNAME FROM SYSCAT.TABLES WHERE TBSPACEID=2 AND TABLEID=1560"

結果:USERSPACE1.DB2INST1.TACY_TEST。

步驟 4:用 db2dart 解析 RecordID 定位具體行

# RecordID 0x0266807 -> 頁號 0x02668 (十進制 157312)、槽號 0x07
db2dart EOS /dd /tsi 2 /oi 1560 /ps 157312p /np 1 /v y

報告 EOS.RPT 中 Slot 7 顯示 Column 1 Value = 4、Column 2 = 'a',確認被鎖行為 (4, 'a')。

工具參數速查

工具核心參數說明
db2pd -applications-db <db>列出所有應用狀態、句柄、協調進程
db2pd -locksshowlock wait僅顯示等待鎖的應用與鎖資源詳情
db2dart/dd /tsi <ts_id> /oi <obj_id> /ps <page_num>p /np <pages> /v y傾印數據頁,頁號需十進制並加 'p' 後綴

常見坑點提醒

  • RecordID 為 16 進制,前 3 字節頁號、後 1 字節槽號,轉換時勿遺漏前導零。
  • db2dart 需實例擁有者權限執行,且數據庫處於非一致狀態會報警告(不影響頁面讀取)。
  • 若鎖類型為 Table,無需 dart,直接由 TableID 查表即可。

總結

「應用 → 鎖 → 表 → 行」四步閉環,配合 db2pd 輕量級監控與 db2dart 深度頁面分析,可在分鐘級定位鎖等待根因,指導應用調優(縮短事務、調整隔離級別、索引覆蓋)或殺會話恢復業務。

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