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

Oracle 資料庫運行機制全景解析:從用戶請求到提交、檢查點、回滾段、空間管理

     編輯:Oracle 資料庫基礎

一條 UPDATE 背後,Oracle 經歷了怎樣的精密協作?本文從用戶連接建立 (專用/共享/重定向)、SQL 解析執行 (Shared Pool/Library Cache)、緩存管理 (Buffer Cache/LRU/Dirty List)、Redo 生成 (Log Buffer/LGWR/檢查點)、Undo 管理 (回滾段/前映像/SCN)、提交/回滾 (快速提交/延遲塊清理)、Instance 恢復 (前滾/回滾)、空間分配 (Free List/Bitmap/ASSM) 八大環節,還原資料庫核心運行軌跡。

一、連接建立:三種模式

模式流程關鍵點
專用服務器 - HandoffListener 生成 Server Process → 繼承 Listener Socket → RESEND/CONNECT/ACCEPT 三次握手需 OS 支援 Socket 繼承 (Windows 需 USE_SHARED_SOCKET=TRUE)
專用服務器 - RedirectListener 生成 Server Process → 選新 Port → 告知 Client → Client 直連新 Port跨平台通用,額外一次網路往返
共享服務器Listener 生成 Dispatcher → 選 Port → Client 連 Dispatcher → Dispatcher 入請求隊列 → Shared Server 處理 → 回應隊列 → Dispatcher 回 Client單實例單一請求隊列、多響應隊列、MAX_DISPATCHERS/SHARED_SERVERS 控制

二、SQL 解析與執行計畫

  1. 字符 → ASCII → Hash → 查 Library Cache (Shared Pool)。
  2. Hit:直接用已解析樹 + 執行計畫 (Soft Parse)。
  3. Miss:Hard Parse → 語法檢查 → 語義解析 (Data Dictionary) → 優化器 (CBO/RBO + 統計/Outline) 生成計畫 → 權限檢查 → 生成編譯碼 → 存入 Library Cache (需 Shared Pool Latch)。
  4. Data Dictionary 讀入同樣需 Library Cache Latch 保護。

三、Buffer Cache 管理與 Dirty Buffer

  • Server Process 讀資料塊 → 申請 Cache Buffer Chain Latch → 找空閒桶 (LRU 尾部) 或覆蓋 Non-Dirty Buffer → 讀入磁碟 → 掛入 LRU 頭部。
  • 若無空閒 → 觸發 DBWn 寫 Dirty Buffer (Dirty List) 騰空間。
  • DB_FILE_MULTIBLOCK_READ_COUNT 控制多塊讀取 (全掃描/快速全掃描)。

四、Redo 生成與 LGWR 寫入

  • 修改前:行鎖 (表頭) → 讀入塊 → 生成 Redo Entry (RowID、Old/New Value、SCN) → 寫 Log Buffer (需 Redo Allocation Latch)。
  • LGWR 觸發條件:Log Buffer 1/3 滿、1MB、3 秒、Commit、Checkpoint、DBWn 前。
  • 循環寫入 Online Redo Log Group,鏡像同步寫入。
  • 寫完釋放 Latch,Buffer 可覆蓋。

五、Undo (回滾段) 與前映像

  • 修改後:更新塊頭事務列表 (SCN) → 複製前映像 (RowID、Old Value、SCN、前前映像指針) 寫入 Undo Segment (Undo Tablespace 或舊 Rollback Segment)。
  • 同一事務多次 UPDATE 同行 → Undo 串成鏈 (最新指向最舊)。
  • INSERT → Undo 記錄 RowID (回滾時刪除);DELETE → Undo 記錄全行;UPDATE → 記錄修改列舊值。

六、Commit / Rollback 機制

動作流程關鍵點
COMMIT生成 SCN → 標記 Undo 事務 Committed → 觸發 LGWR 寫 Log Buffer (含 Commit 記錄) → 釋放行鎖 (待 DBWn 寫完) → 快速提交 (塊在 Cache 寫 SCN) / 延遲塊清理 (塊已刷盤)LGWR 寫完才返回用戶,保證持久性
ROLLBACK按 Undo 鏈逆序應用前映像 → 恢復資料塊 → 標記 Undo Rolled Back → 釋放鎖只能回滾未提交事務

斷電場景: Commit 後未刷盤 → Instance Recovery 前滾 (Redo);未 Commit 已刷盤 → Instance Recovery 回滾 (Undo + Redo)。

七、檢查點 (Checkpoint) 與 Instance Recovery

  • 觸發:Log Switch、LOG_CHECKPOINT_INTERVAL/TIMEOUT、ALTER SYSTEM CHECKPOINT、FAST_START_MTTR_TARGET。
  • 動作:LGWR 刷 Log Buffer (含未提交) → DBWn 刷 Dirty Buffer (僅 Committed) → 更新 Control File/Datafile Header SCN。
  • 恢復時間由 Checkpoint 間隔決定:FAST_START_MTTR_TARGET 直接設定目標恢復秒數。
  • SMON 執行:前滾 (Committed Redo) + 回滾 (Uncommitted Redo+Undo)。

八、空間管理:Free List vs Bitmap (ASSM)

  • 字典管理表空間 / 手動段空間管理: Segment Header Free List 鏈表。PCTFREE/PCTUSED 控制進出。多進程爭用 → 多 Free List (FREELISTS n)。
  • 本地管理表空間 (LMT) + ASSM: Segment Header Bitmap 追蹤每塊空閒狀態 (Formatted/Unformatted/FS1-FS4)。無 Free List 爭用、自動管理、支援大並發 INSERT。
  • Extent 分配:LMT 自動 (Uniform/Autoallocate)、字典管理用戶指定。Extent Map 存儲於 Datafile Header (LMT) 或 Data Dictionary (DMT)。
  • 行遷移 (整行移新塊留指針) vs 行鏈接 (單行跨多塊,長度 > Block Size)。

核心參數速查

領域關鍵參數
共用池SHARED_POOL_SIZE, SHARED_POOL_RESERVED_SIZE, CURSOR_SHARING
緩存DB_CACHE_SIZE, DB_BLOCK_BUFFERS, DB_FILE_MULTIBLOCK_READ_COUNT
Redo/檢查點LOG_BUFFER, LOG_CHECKPOINT_INTERVAL/TIMEOUT, FAST_START_MTTR_TARGET
UndoUNDO_MANAGEMENT=AUTO, UNDO_TABLESPACE, UNDO_RETENTION
空間PCTFREE, PCTUSED, FREELISTS, EXTENT MANAGEMENT LOCAL, SEGMENT SPACE MANAGEMENT AUTO
並行PARALLEL_MAX_SERVERS, PARALLEL_DEGREE_POLICY

結語

Oracle 運行機制是「鎖、鎖存器、SCN、Redo、Undo、Buffer Cache、背景進程」七大核心概念的精密編排。理解每個環節的觸發條件、數據流向、失敗模式、恢復邏輯,才能在效能調優、故障排查、架構設計中,從現象穿透到本質,做出精準決策。

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