DB2 擁有豐富鎖類型(S, IS, NS, X, IX, SIX, NX, U, Z...),不同資料庫實作差異大。大多數開發人員無法完全掌握所有鎖語意,但掌握診斷流程即可有效解決鎖等待問題。
-- 建立測試表
DB2 "CREATE TABLE TEST_LOCK (COL INT, COL2 CHAR(10))"
-- 視窗 1:開啟交易未提交
DB2 +C "INSERT INTO TEST_LOCK VALUES(1,'AAA')"
-- 視窗 2:查詢同一表 (長時間無回應)
DB2 "SELECT * FROM TEST_LOCK"
DB2 LIST APPLICATIONS SHOW DETAIL
關鍵指標:狀態欄位顯示 鎖定等待 或 Lock-waiting,記錄 Application Handle。
XUXIAOF db2bp.exe 68 *LOCAL.DB2.090817075736 00003 1 0 4464 鎖定等待 2009-08-18 10:53:24
DB2PD -D SAMPLE -LOCKS SHOW DETAIL
輸出關鍵欄位分析:
| 欄位 | 含義 | 關注重點 |
|---|---|---|
| Sts | 鎖狀態 | W (Waiting) 為等待者,分析入手點 |
| Lockname | 鎖資源識別碼 | 含表空間/表/分區/頁/槽位資訊 |
| Type/Mode | 鎖類型/模式 | Row/.NS 表示資料列層級 Next Key Share 鎖 |
| Owner | 持有者 Agent ID | 對應阻塞者的 Application Handle |
範例輸出解讀:
Address TranHdl Lockname Type Mode Sts Owner Dur HoldCount Att ReleaseFlg 0x7F8911B0 8 0300050004008002... Row .NS W 2 1 0 0x00 0x00000001 TbspaceID 3 TableID 5 PartitionID 0 Page 640 Slot 4
→ 視窗 1 (Handle 2) 持有資料列鎖,視窗 2 (Handle 3) 狀態 W 等待中。
DFT_MON_LOCK=ON 追蹤鎖升級事件DB2PD -D DB -LOCKS WAIT 檢查等待鏈