一條 UPDATE 背後,Oracle 經歷了怎樣的精密協作?本文從用戶連接建立 (專用/共享/重定向)、SQL 解析執行 (Shared Pool/Library Cache)、緩存管理 (Buffer Cache/LRU/Dirty List)、Redo 生成 (Log Buffer/LGWR/檢查點)、Undo 管理 (回滾段/前映像/SCN)、提交/回滾 (快速提交/延遲塊清理)、Instance 恢復 (前滾/回滾)、空間分配 (Free List/Bitmap/ASSM) 八大環節,還原資料庫核心運行軌跡。
| 模式 | 流程 | 關鍵點 |
|---|---|---|
| 專用服務器 - Handoff | Listener 生成 Server Process → 繼承 Listener Socket → RESEND/CONNECT/ACCEPT 三次握手 | 需 OS 支援 Socket 繼承 (Windows 需 USE_SHARED_SOCKET=TRUE) |
| 專用服務器 - Redirect | Listener 生成 Server Process → 選新 Port → 告知 Client → Client 直連新 Port | 跨平台通用,額外一次網路往返 |
| 共享服務器 | Listener 生成 Dispatcher → 選 Port → Client 連 Dispatcher → Dispatcher 入請求隊列 → Shared Server 處理 → 回應隊列 → Dispatcher 回 Client | 單實例單一請求隊列、多響應隊列、MAX_DISPATCHERS/SHARED_SERVERS 控制 |
DB_FILE_MULTIBLOCK_READ_COUNT 控制多塊讀取 (全掃描/快速全掃描)。| 動作 | 流程 | 關鍵點 |
|---|---|---|
| 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)。
LOG_CHECKPOINT_INTERVAL/TIMEOUT、ALTER SYSTEM CHECKPOINT、FAST_START_MTTR_TARGET。FAST_START_MTTR_TARGET 直接設定目標恢復秒數。PCTFREE/PCTUSED 控制進出。多進程爭用 → 多 Free List (FREELISTS n)。| 領域 | 關鍵參數 |
|---|---|
| 共用池 | 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 |
| Undo | UNDO_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、背景進程」七大核心概念的精密編排。理解每個環節的觸發條件、數據流向、失敗模式、恢復邏輯,才能在效能調優、故障排查、架構設計中,從現象穿透到本質,做出精準決策。