Repeatable Read (RR) 是 DB2 最嚴格的隔離級別。它鎖定應用程式在工作單元中**引用的所有行**(不僅是檢索到的行),確保:
掃描 10,000 行、謂詞過濾後僅 10 行符合條件:
這是為了防止幻像讀:若允許其他交易在掃描範圍內插入新行,重新執行查詢時會出現「幻像行」。
視存取路徑與謂詞,鎖定可為:Share (S)、Next Key Share (NS)、Update (U)、Exclusive (X)。
大量行鎖可能超出 locklist / maxlocks 閾值,觸發**鎖定升級**為表級鎖(相當於隱性 LOCK TABLE)。優化器若預判升級風險高,可能直接選擇表級鎖進行索引掃描。
locklist、maxlocks評估參照完整性約束時,DB2 可能**內部將隔離級別升級為 RR** 掃描外部表,無論使用者設定為何。此舉增加死鎖/鎖等待風險。
對策: 為外鍵欄位建立索引,使 RI 掃描走索引而非全表掃描。
| 場景 | 建議隔離級別 |
|---|---|
| 金融帳務、庫存扣減等絕對一致性要求 | RR |
| 高併發讀多寫少、可接受幻像讀 | RS 或 CS |
| 大量資料報表、唯讀分析 | UR (Uncommitted Read) |
RR 提供最強一致性保證,但以**大量鎖定、低併發、高死鎖風險**為代價。非核心業務強一致性場景,**優先考慮 RS**。