《Oracle 核心技術》閱讀筆記:架構、Redo/Undo、交易一致性、鎖與 Latch、快取、恢復、解析優化、RAC
本文為 Jonathan Lewis 經典著作《Oracle Core》的結構化閱讀筆記,涵蓋核心架構、Redo/Undo 機制、交易與一致性、鎖與 Latch、緩存與複製、寫入與恢復、解析與優化、RAC 等核心主題。適合資深 DBA 與效能調優工程師作為知識地圖參考。
目錄結構
- 開始:SGA/SCN 核心三進程
- Redo 與 Undo
- 交易與一致性
- 鎖與 Latch
- 緩存與複製
- 寫入與恢復
- 解析與優化
- RAC 及「缺陷」
- 附錄 A:轉儲與調試
第一章:開始 — 核心三進程
真正需要理解的僅三個背景進程:
- LGWR (Log Writer):串行寫入 Redo Log Buffer 到 Online Redo Log
- DBWR (Database Writer):將髒緩衝區寫入資料檔
- DBWn:多重 DBWR 平行寫入
SCN (System Change Number) 是 Oracle 內部時鐘,序列化所有變更。
第二章:Redo 與 Undo — 變更向量與四步驟
核心概念:Change Vector (改變向量)
Oracle v6 起採用「改變向量」描述資料變更,兩份儲存:
- 當前狀態:資料塊本身的修改
- Redo 記錄:描述如何重做此變更
資料修改四關鍵步驟(理論順序)
- 建立變更操作描述 → Redo Change Vector
- 建立 Undo 描述 → 寫入 Undo 表空間的 Undo 區塊
- 建立 Undo 描述的描述 → Undo 的 Redo Change Vector
- 實際改變資料項
實際執行順序:3 → 1 → 2 → 4
- 步驟 1 與 3 合併為一條 Redo 記錄寫入 Redo Log Buffer
- 此設計確保:資料修改可逆,支援崩潰恢復與交易回滾
關鍵洞見
- Redo 簡單,Undo 複雜:Undo 讓會話看見舊版本資料(讀一致性)
- Redo Allocation Latch:保護 Redo Log Buffer,類 Linux
spin_lock
- 協作開銷:每個人做一點「額外工作」,避免單點競爭
- 讀一致性:有限 ITL entries,超出轉為 Undo 記錄「倒帶」
- 回滾產生新 Redo:類版控系統
revert 產生新 Commit
- 消除回滾成本:全域暫存表 (GTT)
第三章:交易與一致性
- Undo Segment 結構:Segment Header、Extent Map、Extent Control Header、Transaction Table (TRN TBL,含 Wrap#)
- Transaction Table Slot:在
v$transaction 稱為「槽」
- Commit Cleanout:延遲區塊清除,「均攤」隱藏工作量
- ORA-1555 Snapshot Too Old:Undo 被覆寫導致讀一致性失敗
- LOB 特例:僅需關心索引的交易與讀一致性,ORA-22924
- ITL Entry 結構:XID、UBA、SCN
第四章:鎖與 Latch
Latch (閂鎖)
- 保護共享記憶體結構
- 本質:記憶體位置 + Test-and-Set CPU 原子操作 ≈ Linux
spin_lock
- 單核 CPU 下 Spin Lock 無效
- 統計視圖:
v$latch_parent、v$latch_children (gets, misses, spin_gets, sleeps, wait_time)
- 等待喚醒機制 ≈ Linux 信號量
- 11g 多數 Latch 移除,僅剩
library cache load lock
Lock (鎖)
- 保護資料物件(鎖 = 排隊?)
- 基礎結構:
x$ksqrs (v$resource)、x$ksqeq (鎖模式)、v$lock
- 鎖定流程:加入等待隊列尾 → 等待隊列與轉換隊列無前驅 → 附加到擁有者隊列
- 死鎖:TX/4 等待
- 鎖模式:NL, SS, RS, SX, RX, S, SSX, SRX, X
- KGL Lock/Pin → 11g 後逐步被 Mutex 取代
第五章:緩存與複製
- 10g ASMM:
db_cache_size/shared_pool_size → 固定 Granule
- 8 種快取:
db_cache_size, db_keep_cache_size, db_recycle_cache_size, db_2k_cache_size...
- LRU/TCH 演算法:極重要,待細讀
- REPL_AUX → REPL_MAIN 複製機制
- 查找資料流程:Pin 緩衝區 → 邏輯 IO → 更新 → 載入 Hash 鏈 → 讀一致性拷貝 → 物理 IO → 表掃描
第六章:寫入與恢復
- LGWR:Redo Sync Writes、Log File Sync
- 10g+ 新 Commit 選項
- Redo Wastage、Private Redo Threads
- DBWR:緩衝區 Header、檢查點隊列、增量檢查點
- 寫進程交互、相對/絕對檔號
- 恢復機制
第七章:解析與優化
- Data Dictionary Cache:
v$sgastat
cursor_sharing
- Parse 活動與 Parse Call
- Library Cache、Shared Pool
- 解析、優化、Executing、Locking、Pinning
第八章:RAC 及『缺陷』
- GRD (Global Resource Directory)
- VIP 與 SCAN
- 至少 4 Instance 才有 Master/Shadow 意義
- GCS (Global Cache Service) 與 GES (Global Enqueue Service)
- Cache Fusion (緩存融合)
附錄 A:轉儲與調試
Systemstate Dump、Errorstack、Hanganalyze、Block Dump 等進階診斷技術。
註:此筆記為粗略結構整理,多處標註「待有時間細讀」。建議配合原書原文與官方文件深入研讀各章節細節。