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

Oracle 系統鎖機制全解析:Latch、Mutex 與內部鎖

     編輯:Oracle 教學

系統鎖概覽

Oracle 採用多層次鎖機制保護內存結構與內部數據一致性,對用戶透明。核心三類:Latch(閂鎖)、Mutex(互斥鎖)、Internal Locks(內部鎖),保護粒度與持有時間遞增。

Latch:輕量級序列化機制

保護 SGA 中共享內存結構(如共用池、Library Cache、Buffer Cache 鏈表)。適用場景:

  • 多 Session 並發修改同一數據結構。
  • 一 Session 讀、另一 Session 寫同一結構。
  • 內存重新分配(如共用池擴展)。

特性:

  • 單 Latch 通常保護多個對象(如共用池 Latch 覆蓋 Library Cache、Dictionary Cache 等)。
  • 無排隊機制:請求失敗進入 Latch Spinning(活等待燒 CPU),達閾值轉 Latch Sleeping(釋放 CPU 休眠)。
  • 持有時間極短(微秒級),但高頻獲取/釋放(如薪資更新可觸發數千次)。
  • 實現依賴作業系統原子指令。

典型競爭熱點:硬解析爭用 Library Cache Latch、共用池內存分配爭用 Shared Pool Latch。V$LATCH 記錄獲取次數、等待時間等統計。

Mutex:更精細的互斥對象

保護單一內存對象(如單個 Library Cache Bucket),解決 Latch 保護範圍過大導致的誤傷競爭。

  • 減少競爭範圍:Latch 鎖住整組對象,Mutex 僅鎖單對象,並發吞吐顯著提升。
  • 內存開銷更小:結構輕量。
  • 支援共享模式:多 Session 可並發持有共享模式 Mutex(如並發解析同一 Cursor)。

10g 起大量引入 Mutex 替代 Library Cache Latch,11g 進一步擴展。

內部鎖:高層級、長持有、複雜語義

1. 字典緩存鎖

保護數據字典緩存條目。解析時持有共享鎖(防止對象定義變更),DDL 完成時持有排他鎖。持有時間極短。

2. 文件與日志管理鎖

  • 控制文件鎖:確保單進程修改。
  • 線上日志/歸檔日志協調鎖:管理日志組切換、歸檔狀態。
  • 數據文件掛載鎖:共享模式多實例掛載、排他模式單實例掛載。

此類鎖代表文件狀態,持有時間長(如實例啟動期間持續)。

3. 表空間與 Undo 段鎖

  • 表空間狀態鎖:保證所有實例對表空間 Online/Offline 狀態一致。
  • Undo 段鎖:確保單實例獨佔寫入某 Undo 段。

診斷視角

  • V$LATCH、V$LATCH_CHILDREN:Latch 統計與子閂鎖熱點。
  • V$MUTEX_SLEEP、V$MUTEX_SLEEP_HISTORY:Mutex 等待分析。
  • V$ENQUEUE_LOCK、V$RESOURCE、V$LOCK:內部鎖(Enqueue)視圖。

理解三類鎖的層級、粒度、持有特性,是解決高並發「Library Cache: Mutex X」、「Latch: Cache Buffers Chains」、「Enqueue: TX - Row Lock Contention」等頂級等待事件的理論基石。

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