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

DB2 鎖問題診斷實戰(上):死鎖與鎖等待原理、核心參數調優

     編輯:DB2 教學

兩大鎖現象本質區別

現象成因屬性解決方向
死鎖 雙向循環等待資源,雙方均不釋放 應用邏輯缺陷 調整程式存取順序、縮短事務、加索引減少掃描
鎖等待 前序事務持有鎖,後序事務排隊 效能/並發壓力 優化 SQL、調整隔離級別、擴大鎖超時參數

核心配置參數

db2 get db cfg for <dbname>

重點參數:

  • DLCHKTIME (毫秒): 死鎖偵測間隔。預設 10000 ms(10 秒)。
    設定建議:DLCHKTIME < LOCKTIMEOUT × 1000,確保死鎖先被偵測到,而非等到超時。
  • LOCKTIMEOUT (秒): 鎖等待最長時間。預設 -1(無限等待)。
    設定建議:視業務 SLA 設定 10~60 秒,避免應用無限懸掛。

參數修改範例

db2 update db cfg for <dbname> using LOCKTIMEOUT 30
db2 update db cfg for <dbname> using DLCHKTIME 5000
修改後需 db2stop; db2start 重啟實例生效(部分參數可線上生效,建議統一重啟)。

快速排查並發應用

db2 list applications
db2 list applications show detail
db2 list applications for database <dbname>

用途:確認是否存在未預期的並發連線、識別長時間持有鎖的應用代理程式 ID(agentid),為後續快照分析鎖定目標。

診斷流程總覽

  1. 檢視並調整 DLCHKTIME、LOCKTIMEOUT
  2. list applications 排查並發來源
  3. 啟用監視器開關 LOCK、STATEMENT
  4. 獲取多層級快照(資料庫/應用/鎖/動態 SQL)
  5. 必要時部署事件監視器長期蒐集死鎖/語句細節

下篇將詳細示範 快照指令實戰與事件監視器部署。

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