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

Oracle Latch 與 Lock 機制深度解析:保護記憶體 vs 保護資料、死鎖與讀一致性

     編輯:Oracle 資料庫基礎

Oracle 同步機制分兩層:Latch (閂鎖) 保護記憶體結構、**無佇列、瞬間得失**;Lock (鎖) 保護資料、**有佇列、可等待**。

一、Latch 核心特徵與主要類型

  • 不可跨進程共享;請求即時成功或失敗,無排隊。
  • 主要 Latch:SHARED POOL、LIBRARY CACHE、CACHE BUFFERS LRU CHAIN、CACHE BUFFERS CHAINS、REDO ALLOCATION、REDO COPY。
  • 爭用表現:CPU 忙碌自旋、latch free 等待事件。

二、Lock 核心特徵

  • 多用戶可共享表級鎖 (修改不同行);行級鎖 (TX) 排他。
  • 請求按順序入佇列 (Enqueue),先到先得。
  • 鎖持有至 COMMIT/ROLLBACK 釋放。
  • MAXTRANS 決定單塊最大並發交易數 (1~255)。

三、死鎖機制

  • 雙方各持一鎖、互相請求對方鎖 → 無限等待。
  • **僅由 Lock 爭用引發,Latch 不會死鎖**。
  • Oracle 自動偵測 → 擇一犧牲者回滾、釋放鎖、回傳 ORA-00060。
  • 正常爭用下,最終資料版本由 SCN (System Change Number) 決定。

四、讀一致性三大經典場景 (SCN + Undo 遞歸重構)

核心原則:**查詢啟動瞬間 (Query SCN) 看到的資料快照,不受後續變更影響**。Undo 段提供「時光機」。

場景時序讀取來源關鍵判斷
大 SELECT、小 UPDATESELECT (SCN=101) 先啟動
UPDATE (SCN=102) 後提交
Undo (Before Image)SELECT 讀塊發現 SCN > 101 或有 ITL → 遞歸重構 Undo 至 SCN=101
大 UPDATE、小 SELECTUPDATE (SCN=101) 先啟動
SELECT (SCN=102) 後啟動
當前塊 (若未被鎖) / Undo (若已被鎖)SELECT 啟動時 UPDATE 未鎖定該塊 → 直接讀當前塊
大 UPDATE、小 UPDATE、SELECTU1(101) → U2(102) 鎖行 A
U1 等 U2 釋放 A
S1(103) 讀行 B → Undo (U1 已鎖 B)
U3(104) 改行 B → 死鎖 (U1 等 A、U3 等 B)
Undo / 死錯證明 U1 已鎖行 B;死鎖自動解除

五、關鍵認知

  1. 讀一致性 = **整個塊遞歸重構**至 Query SCN,非單一 ITL 遞歸查找。
  2. Undo 足夠大 → 長查詢也能獲得完美一致性快照。
  3. ORA-01555 Snapshot Too Old = Undo 被覆寫、無法重構 → 增加 Undo 保留時間/空間。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved