Oracle 實例由 SGA (共享記憶體) 與一組後台進程構成。每個進程承擔特定職責,協同完成資料持久化、崩潰恢復、並發控制、分布式事務等核心能力。本文逐一解析九大關鍵進程的觸發條件、工作流程與配置參數。
核心任務:將 Buffer Cache 中被修改的「髒緩衝區」寫入資料檔,維持緩衝區可用空間。
DB_BLOCK_WRITE_BATCH 參數值一半時,服務進程通知 DBWR。DB_BLOCK_MAX_SCAN_CNT 個緩衝區仍找不到可用塊,通知 DBWR。多 DBWR 配置:DB_WRITERS 參數控制進程數 (支援多磁碟並行寫入)。採 LRU 演算法保持熱點資料在記憶體,最小化 I/O。
核心任務:將 Redo Log Buffer 內容同步寫入線上重做日誌檔組 (多路鏡像)。
採循環緩衝區設計,LGWR 高速寫入確保空間常備可用。注意:提交前可能預寫日誌項,僅在提交後永久生效。SCN (System Change Number) 賦予提交時刻,支援並行恢復同步。
正常情況下 LGWR 執行檢查點更新控制檔/資料檔標頭。若檢查點導致效能下降 (大量資料檔),啟用 CHECKPOINT_PROCESS=TRUE 獨立 CKPT 進程分擔標頭更新工作,DBWR 仍負責實際寫塊。
僅在 DISTRIBUTED_TRANSACTIONS > 0 時存在。定期連接掛起分布式事務的遠端節點,自動解決 in-doubt 事務,清理懸掛事務表。遠端不可用時按間隔重試。
僅在 ARCHIVELOG 模式且啟用自動歸檔時啟動。將填滿的線上重做日誌組複製至歸檔目的地,支援時間點恢復 (PITR) 與 Data Guard 同步。
最多 10 個進程 (LCK0-LCK9),僅在 Parallel Server/RAC 環境下運作,處理跨實例的全域資源鎖 (Global Enqueue Service)。
允許大量用戶進程共享少量 Shared Server 進程,減少 PGA 總佔用。每種網路協議至少一個 Dispatcher。網路接收器接收連線請求,分派給 Dispatcher 或建立專用伺服器連線。需 SQL*Net v2+。
| 進程 | 核心職責 | 關鍵參數/備註 |
|---|---|---|
| DBWR | 髒塊刷盤、緩衝區管理 | DB_WRITERS, DB_BLOCK_WRITE_BATCH |
| LGWR | Redo 同步寫入、SCN 生成 | LOG_BUFFER, Fast Commit |
| CKPT | 檢查點標頭更新分擔 | CHECKPOINT_PROCESS |
| SMON | 實例恢復、空間合併、臨時段清理 | 自動喚醒 |
| PMON | 進程失敗清理、鎖釋放、Dispatcher 重啟 | 定期喚醒 |
| RECO | 分布式 in-doubt 事務解決 | DISTRIBUTED_TRANSACTIONS |
| ARCH | 線上日誌歸檔 | LOG_ARCHIVE_START, 歸檔模式 |
| LCKn | RAC 全域鎖協調 | 最多 10 個 |
| Dnnn | 共享伺服器連接多工 | MTS/Shared Server 架構 |