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

利用 db2pd 深度分析 DB2 鎖等待與鎖超時

     編輯:DB2 教學

db2pd 鎖監控核心選項

db2pd 為輕量級、無鎖、引擎外監控工具(V8.2+),支援交互/批次模式。鎖分析關鍵選項:

  • -locks wait showlocks:僅顯示等待鎖與持有鎖,showlocks 解析鎖名稱為表空間/表/分區/頁/槽,配合 SYSCAT.TABLES 反查表名
  • -transactions:映射事務句柄 → 應用句柄、狀態、鎖數
  • -agents:應用句柄 → 代理線程、用戶 ID、客戶端、讀寫行數
  • -applications:應用狀態(Lock-wait/UOW-Waiting)、當前/上一條語句錨點 (AnchID/StmtUID)
  • -dynamic:動態 SQL 快取內容,依錨點/StmtUID 反查具體 SQL 文本與隔離級別 (Iso: UR/CS/RS/RR)

鎖等待實戰場景複現

  1. 建立 SAMPLE 資料庫
  2. Session A:UPDATE EMPLOYEE SET BONUS=SALARY*0.1 WHERE JOB='MANAGER'(未提交)
  3. Session B:UPDATE EMPLOYEE SET SALARY=SALARY*0.02(阻塞)
  4. DBA 執行 db2pd -db sample -locks wait showlocks -transactions -agents -applications -dynamic

關鍵輸出解讀

  • Locks:TranHdl=2 持有 Row X 鎖 (G=Granted),TranHdl=6 等待同鎖 (W=Wait)
  • Transactions:TranHdl=2 → AppHandl=30 (USER_A);TranHdl=6 → AppHandl=34 (USER_B)
  • Applications:AppHandl=34 狀態 Lock-wait,當前語句 AnchID=195, StmtUID=1
  • Dynamic Cache:AnchID=195 → UPDATE EMPLOYEE SET SALARY = SALARY * 0.02 (Iso=CS);AnchID=60 → UPDATE EMPLOYEE SET BONUS = SALARY * 0.1 WHERE JOB = 'MANAGER'

結論:USER_A 持有 X 鎖阻塞 USER_B 全表更新。對策:勸 USER_A 提交/回滾、強制斷開、配置 Governor 自動終結長事務。

單次調用最佳實踐

db2pd -db sample -locks wait showlocks -transactions -agents -applications -dynamic \
      -file db2pd.out -repeat 15 40
  • -file 輸出重定向文件
  • -repeat 15 40 每 15 秒採樣 40 次(10 分鐘),捕捉短暫鎖等待
  • 間隔需小於 LOCKTIMEOUT(如 20 秒)以捕捉超時前狀態

DB2 9 新特性:db2cos 自動捕捉鎖超時

  1. 設定超時:UPDATE DB CFG FOR SAMPLE USING LOCKTIMEOUT 10
  2. 配置捕捉:db2pdcfg -catch locktimeout count=1 或 db2pdcfg -catch 911,68 count=1 (SQLCODE -911, Reason 68)
  3. 驗證:db2diag -g funcname:=pdErrorCatch 確認 ZRC -2146435004 (內部鎖超時碼)
  4. 修改 sqllib/bin/db2cos (UNIX) 或 sqllib\bin\db2cos.bat (Windows),替換為完整採集命令:
    db2pd -db %DATABASE% -locks wait -transactions -agents -applications -dynamic \
          >> %DIAGPATH%db2cos%PID%%TID%.%DBPART%
  5. 發生超時時自動生成診斷文件,事後分析
  6. 清理:db2pdcfg -catch clear

輔助工具:db2diag

  • db2diag -rc -2146435004 查詢 ZRC 含義
  • db2diag -g data:=-2146435004 定位超時確切時間戳
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved