首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 實例後台進程核心解析:SMON、PMON、DBWn、LGWR、CKPT 協作機制

     編輯:Oracle 資料庫相關知識

Oracle 實例由一組後台進程協同運作,保障資料庫的啟動、恢復、寫入、日誌持久化與一致性。本文深度解析五大核心進程職責、觸發條件、演算法策略,並補充 10g+ 新增進程功能,助 DBA 理解內核行為、定位效能瓶頸。

五大核心進程詳解

1. SMON (System Monitor) —— 系統守護者

  • 啟動階段: 掛載資料庫 (尋找驗證控制檔) → 開啟資料庫 (驗證所有資料檔與線上日誌檔)。
  • 運行期職責:
    • 執行個體恢復: 啟動時若發現不一致,自動前滾 (Redo) 並回滾 (Undo) 未提交事務。
    • 臨時段清理: 釋放不再使用的臨時段空間 (排序、雜湊、索引建立產生)。
    • 合併連續空閒區塊: 字典管理表空間 (DMT) 中合併相鄰 free extents (LMT 本地管理表空間無需)。

2. PMON (Process Monitor) —— 會話清道夫

  • 觸發條件: 使用者進程**非正常中斷** (Client 異常退出、網路斷線、Kill -9、ORA-600/7445 等)。
  • 清理動作:
    1. 釋放 Server Process 佔用的 PGA 記憶體回作業系統。
    2. 回滾該會話未提交的事務 (釋放鎖、Undo 回滾)。
    3. 釋放資源鎖 (Library Cache Lock, Row Cache Lock 等)。
    4. 從 V$SESSION/V$PROCESS 移除會話資訊。
  • 正常斷開: 由 Server Process 自行有序清理,**不經 PMON**。

3. DBWn (Database Writer) —— 惰性寫入大師

  • 核心使命: 將緩衝區快取中的**髒塊** 寫入資料檔。會話**不直接寫磁碟**,只修改記憶體緩衝區。
  • 多進程: DBW0~DBW9、DBWa~DBWj (最多 36 個),預設 CPU:DBWn = 8:1。
  • 「極懶演算法」四大觸發寫入條件:
    1. 無可用緩衝區: Server Process 尋找免費緩衝區超時 (內部閾值),強制 DBWn 刷髒塊騰空間。
    2. 髒緩衝區過多: 達內部高水位標記,主動刷寫防止下次尋找免費緩衝區阻塞。
    3. 三秒超時 (Timeout): 每 3 秒喚醒檢查,閒置系統也會刷寫,縮短恢復視窗。
    4. 檢查點 (Checkpoint): CKPT 發號,要求**刷新所有髒塊**,此時效能波動最大。
  • 關鍵點: **事務 COMMIT 時 DBWn 完全不動作**,只由 LGWR 寫 Redo。髒塊最終一定會落盤,但時間不確定。

4. LGWR (Log Writer) —— 重做日誌守門人

  • 核心使命: 將 Redo Log Buffer 內容**順序寫入**線上日誌檔 (Online Redo Log)。
  • 三大觸發寫入條件:
    1. COMMIT 時 (強制): 會話阻塞等待 LGWR 寫入完成 (含 Group Commit 優化),保證持久性 (Durability)。
    2. Log Buffer 達 1/3 滿: 主動刷寫,使後續 COMMIT 几乎無寫入延遲。
    3. DBWn 寫髒塊前 (Write-Ahead Logging): **必須先寫 Redo**,確保若髒塊落盤後崩潰,可用 Redo 重做或 Undo 回滾。
  • 瓶頸地位: DML 速度上限 = LGWR 寫入速度。優化方向:高速存儲 (NVMe/ASM)、適當增大 Log Buffer、多路徑日誌多工 (Multiplexing) 分散 I/O。

5. CKPT (Checkpoint) —— 恢復時間控制器

  • 職責: 更新控制檔與資料檔標頭的 **Checkpoint SCN**,指示 DBWn 寫入哪些髒塊。
  • 增量檢查點 (8i+): DBWn 以**固定速率**持續刷寫髒塊,而非瞬間全刷。優點:效能曲線平滑、恢復時間可預測 (受 FAST_START_MTTR_TARGET 控制)。
  • 觸發完全檢查點: 正常關閉 (SHUTDOWN NORMAL/IMMEDIATE)、ALTER SYSTEM CHECKPOINT、線上日誌切換 (Log Switch)。

10g/11g/12c/19c 新增關鍵進程

進程全稱核心功能
MMONManageability MonitorAWR 自動快照、ADDM 自動診斷、閾值告警、自動統計收集觸發 — **自動化管理大腦**
MMNLMMON LiteMMON 輔助,處理輕量級統計收集、Active Session History (ASH) 取樣寫入磁碟
MMANMemory Manager自動共享記憶體管理 (ASMM/AMM) — 動態調整 SGA 元件大小 (Shared Pool, Buffer Cache, Large Pool 等)
DIAGDiagnosability Daemon11g+ 故障診斷基礎設施 — 事件封裝、Health Monitor、自動事件包生成 (IPS)
VKTMVirtual Keeper of Time11g+ 高精度時間源 — 提供微秒級壁鐘時間,支援 KST (Keep System Time) 同步
RMSnRAC Management ServerRAC 環境下資源管理、服務品質、負載均衡決策

DBA 觀測與調優切入點

  • LGWR 等待事件: log file sync (COMMIT 等待)、log file parallel write (寫入耗時) → 關注存儲延遲、Group Commit 效率。
  • DBWn 等待事件: free buffer waits (找不到免費緩衝區)、db file parallel write → 檢查緩衝區大小、檢查點頻率、磁碟吞吐。
  • CKPT 控制: 設定 FAST_START_MTTR_TARGET (目標恢復時間,秒),Oracle 自動調整檢查點頻率與 DBWn 寫入速率。
  • PMON 活躍: 大量 PMON 清理動作 → 排查應用連線洩漏、驅動程式 Bug、防火牆斷長連線。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved