Oracle實例啟動時會啟動一組後台進程,各司其職協同完成緩存管理、日誌持久化、故障恢復、鎖協調、共享服務等核心職能。本文系統梳理DBWR、LGWR、CKPT、SMON、PMON、RECO、ARCn、LCKn、Dnnn九大進程的觸發條件、工作流程、調優參數與常見等待事件,為性能診斷與架構優化提供知識地圖。
| 進程 | 全稱 | 核心職責 | 關鍵觸發條件 | 相關等待事件 |
|---|---|---|---|---|
| DBWR | Database Writer | 將髒緩衝寫入數據文件,管理LRU鏈表 | 髒緩衝達閾值、LRU掃描無可用緩衡、檢查點、超時(3秒) | db file parallel write, db file scattered write |
| LGWR | Log Writer | 將重做日誌緩衝寫入在線日誌文件組 | 事務提交、每3秒、日誌緩衝1/3滿、DBWR寫髒塊前 | log file sync, log file parallel write, log file switch completion |
| CKPT | Checkpoint | 更新數據文件頭檢查點SCN,分離LGWR職責 | 檢查點發生 (LOG_CHECKPOINT_INTERVAL/timeout) | control file sequential read |
| SMON | System Monitor | 實例恢復、臨時段清理、死鎖檢測、表空間合併 | 實例啟動、定期喚醒、其他進程請求 | SMON timer, smon rcn slave |
| PMON | Process Monitor | 用戶進程故障清理、釋放鎖/內存、重啟死掉的Dispatcher/Server | 用戶進程異常終止、定期巡檢 | process startup, cleanup of aborted processes |
| RECO | Recoverer | 分布式事務自動解決 (兩階段提交失敗) | 掛起分布式事務、定期重試遠程連接 | reco retry, distributed transaction |
| ARCn | Archiver | 歸檔已滿在線日誌到歸檔目標地 | 日誌切換、ARCHIVELOG模式啟用 | ARCH wait on SENDREQ, log file switch (arch incomplete) |
| LCKn | Lock Manager | RAC實例間全局鎖協調 (Global Enqueue Service) | RAC環境、跨實例鎖請求 | gc cr block busy, gc current block busy |
| Dnnn | Dispatcher | 共享服務器架構:多路用戶連接複用少量Server進程 | MTS/Shared Server啟用、網絡連接請求 | dispatcher timer, virtual circuit status |
log file sync)。db file parallel write),受DB_WRITER_PROCESSES、DB_BLOCK_WRITE_BATCH控制。調優杠桿:
- 增加DB_WRITER_PROCESSES (CPU核心數/2) 並行寫入。
- 調大LOG_BUFFER減少LGWR喚醒頻率。
- 設置FAST_START_MTTR_TARGET自動調節檢查點頻率。
V$SESSION移除、重啟死亡Dispatcher/Shared Server。GCS (Global Cache Service) 傳輸塊、GES (Global Enqueue Service) 管理鎖。gc cr/current block busy 表示跨實例塊傳輸/鎖轉換延遲,優化:增加互聯帶寬、調整DB_FILE_MULTIBLOCK_READ_COUNT、分區表消除熱點。DISPATCHERS、MAX_DISPATCHERS、SHARED_SERVERS、MAX_SHARED_SERVERS、CIRCUITS。-- 1. 進程狀態與等待
SELECT p.spid, s.sid, s.username, s.program, p.program bg_process, sw.event, sw.wait_time, sw.seconds_in_wait
FROM v$process p, v$session s, v$session_wait sw
WHERE p.addr = s.paddr AND s.sid = sw.sid AND s.type = 'BACKGROUND';
-- 2. DBWR寫入統計
SELECT name, value FROM v$sysstat WHERE name LIKE '%dbwr%';
-- 3. LGWR寫入延遲
SELECT event, total_waits, time_waited_micro/1000 ms, average_wait
FROM v$system_event WHERE event LIKE 'log file%';
-- 4. 檢查點統計
SELECT * FROM v$instance_recovery;
-- 5. Dispatcher負載
SELECT name, network, status, accepted, busy, idle, max_connections
FROM v$dispatcher;
掌握後台進程協作機制,能從V$視圖快速定位性能瓶頸根因:是LGWR寫入慢、DBWR刷盤跟不上、檢查點太頻、還是RAC全局鎖爭用。這是高級DBA從「看現象」進階到「懂本質」的必修課。