什麼是死鎖
死鎖是指兩個或多個事務在執行過程中,因爭奪鎖資源而造成的相互等待現象,若無外力干預,這些事務都將無法繼續執行。
經典死鎖場景
事務 A:已鎖定表 A,嘗試鎖定表 B
事務 B:已鎖定表 B,嘗試鎖定表 A
結果:雙方互相持有對方需要的鎖,形成循環等待
DB2 死鎖檢測與處理
- DB2 會自動檢測死鎖並選擇一個受害者事務回滾,返回 SQLCODE -911。
- 應用層應捕獲該異常並實現重試邏輯。
預防建議
- 統一多表操作的加鎖順序(如始終先鎖 A 再鎖 B)。
- 縮短事務持有鎖的時間,避免在事務中進行遠程調用或複雜計算。
- 使用行級鎖而非表級鎖,減少鎖衝突概率。
- 合理設置隔離級別,如 Read Committed (RC) 可減少間隙鎖。