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

DB2 鎖類型完整圖譜:從 IN 到 Z 模式的 14 種鎖狀態詳解與適用場景

     編輯:DB2 教學

DB2 定義了 14 種鎖模式,按控制強度從弱到強排序。每種模式具有特定的適用對象(表空間/表/列)、擁有者權限與並發者權限。本文逐一解析所有模式,並對應實際 SQL 操作場景,作為鎖診斷的字典參考。

完整鎖模式速查表

#縮寫全稱適用對象控制強度
1INIntent None表空間、表最弱
2ISIntent Share表空間、表↑
3NSNext Key Share列↑
4SShare表、列↑
5IXIntent Exclusive表空間、表↑
6SIXShare With Intent Exclusive表↑
7UUpdate表、列↑
8NXNext Key Exclusive列↑
9NWNext Key Weak Exclusive列↑
10XExclusive表、列↑
11WEWeak Exclusive列↑
12ZSuper Exclusive表空間、表最強

逐模式深度解析

1. IN —— Intent None(意圖無)

  • 適用:表空間、表
  • 擁有者:可讀取含未提交資料,不可修改
  • 並發者:可讀可改,無列級鎖協調
  • 場景:SELECT ... WITH UR 掃描全表、LOCK TABLE ... IN SHARE MODE 之 UR 讀取者

2. IS —— Intent Share(意圖共享)

  • 適用:表空間、表
  • 擁有者:讀取資料,列級加 S/NS 鎖
  • 並發者:可讀可改
  • 場景:CS/RS/RR 隔離級別下的 SELECT、SELECT ... WITH CS

3. NS —— Next Key Share(下一鍵共享)

  • 適用:列
  • 擁有者/並發者:可讀不可改
  • 場景:RS/CS 隔離級別索引掃描時,替代傳統 S 鎖,減少鎖衝突

4. S —— Share(共享)

  • 適用:表、列
  • 擁有者:讀取,不可修改
  • 並發者:可讀(加 S/IS),不可改
  • 場景:RR 隔離級別讀取、LOCK TABLE ... IN SHARE MODE、外鍵父表刪除檢查

5. IX —— Intent Exclusive(意圖互斥)

  • 適用:表空間、表
  • 擁有者:讀取(列S) + 修改(列X/U)
  • 並發者:可讀可改
  • 場景:INSERT/UPDATE/DELETE/SELECT FOR UPDATE、MERGE

6. SIX —— Share With Intent Exclusive(帶意圖互斥的共享)

  • 適用:表
  • 擁有者:讀取 + 修改(列X),不加列 S 鎖
  • 並發者:僅可讀取
  • 場景:大量讀取後少量修改、LOCK TABLE ... IN SHARE MODE 後執行 UPDATE

7. U —— Update(更新)

  • 適用:表、列
  • 擁有者:讀取並預備修改,稍後自動升級為 X
  • 並發者:可讀(S/IS),不可改(X/IX/U 衝突)
  • 關鍵價值:解決「雙方持 S 同時申請 X」死結
  • 場景:SELECT ... FOR UPDATE、UPDATE 陳述式掃描階段

8. NX —— Next Key Exclusive(下一鍵互斥)

  • 適用:列
  • 擁有者:可讀不可改
  • 場景:索引插入/刪除時,對「下一筆」索引鍵加鎖防幻讀(RR/RS)

9. NW —— Next Key Weak Exclusive(下一鍵弱互斥)

  • 適用:列
  • 擁有者:可讀不可改
  • 場景:非系統目錄表索引插入時的下一鍵鎖

10. X —— Exclusive(互斥)

  • 適用:表、列
  • 擁有者:讀寫完全控制
  • 並發者:僅 UR 可讀,其他完全阻擋
  • 場景:資料修改(INSERT/UPDATE/DELETE 實際寫入列)、LOCK TABLE ... IN EXCLUSIVE MODE

11. WE —— Weak Exclusive(弱互斥)

  • 適用:列
  • 擁有者:讀寫控制
  • 場景:非目錄表直接插入列時的鎖模式

12. Z —— Super Exclusive(超級互斥)

  • 適用:表空間、表
  • 擁有者:結構變更(DROP/CREATE INDEX、REORG、ALTER TABLE)
  • 並發者:完全阻擋(含 UR 讀取)
  • 場景:DDL 操作、REORG TABLE、LOAD REPLACE、ALTER TABLE ... ADD COLUMN

SQL 操作 → 鎖模式對應表

SQL 操作表級鎖列級鎖備註
SELECT (UR)IN無髒讀
SELECT (CS)ISS/NS游標穩定
SELECT (RS)ISS/NS讀穩定
SELECT (RR)ISS/NX可重複讀
SELECT FOR UPDATEIXU → XU 鎖預防死結
INSERTIXX/WE/NX含下一鍵防幻
UPDATEIXU → X掃描 U,修改 X
DELETEIXX/NX含下一鍵防幻
LOCK TABLE IN SHARES無不需列鎖
LOCK TABLE IN EXCLUSIVEX無不需列鎖
CREATE/DROP INDEXZ無阻擋所有存取
REORG TABLEZ無維護窗口專用
ALTER TABLEZ/X視操作部分 ALTER 只需 X

鎖模式演進邏輯


讀取路徑:IN → IS → S (→ SIX)
修改路徑:IS/IX → U → X
防幻路徑:NS/NX/NW (RR/RS 索引掃描)
DDL 路徑:Z (獨佔結構)

診斷技巧:從鎖模式反推問題

觀察到的鎖模式可能問題排查方向
大量 S 鎖等待 X長時間查詢阻塞修改優化查詢、降低隔離級別、分批提交
U 鎖大量等待並發 UPDATE 同一熱點列應用層序列化、分區表、樂觀鎖
Z 鎖頻繁出現生產時段執行 DDL/REORG調整維護窗口、ONLINE REORG
NX/NW 大量等待高併發 INSERT 造成索引熱點反向索引、分區、Sequence 減少熱點
IN 鎖大量共存大量 UR 掃描評估是否可接受髒讀、建立 MQT

總結

DB2 的 14 種鎖模式構成精密的並發控制體系。意圖鎖(IN/IS/IX/SIX)協調多粒度層級,U 鎖化解死結,Next-Key 鎖(NS/NX/NW)解決幻讀,Z 鎖守護結構完整性。診斷鎖問題時,先識別模式,再對應 SQL 與隔離級別,即可精準定位根因。

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