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

Oracle後台進程全景圖:DBWR/LGWR/CKPT/SMON/PMON/RECO/ARCn/Lckn/Dnnn功能深度解析

     編輯:Oracle 資料庫基礎

Oracle實例架構核心:九大後台進程協作機制與性能調優關鍵點

Oracle實例啟動時會啟動一組後台進程,各司其職協同完成緩存管理、日誌持久化、故障恢復、鎖協調、共享服務等核心職能。本文系統梳理DBWR、LGWR、CKPT、SMON、PMON、RECO、ARCn、LCKn、Dnnn九大進程的觸發條件、工作流程、調優參數與常見等待事件,為性能診斷與架構優化提供知識地圖。

進程職能速查表

進程全稱核心職責關鍵觸發條件相關等待事件
DBWRDatabase Writer將髒緩衝寫入數據文件,管理LRU鏈表髒緩衝達閾值、LRU掃描無可用緩衡、檢查點、超時(3秒)db file parallel write, db file scattered write
LGWRLog Writer將重做日誌緩衝寫入在線日誌文件組事務提交、每3秒、日誌緩衝1/3滿、DBWR寫髒塊前log file sync, log file parallel write, log file switch completion
CKPTCheckpoint更新數據文件頭檢查點SCN,分離LGWR職責檢查點發生 (LOG_CHECKPOINT_INTERVAL/timeout)control file sequential read
SMONSystem Monitor實例恢復、臨時段清理、死鎖檢測、表空間合併實例啟動、定期喚醒、其他進程請求SMON timer, smon rcn slave
PMONProcess Monitor用戶進程故障清理、釋放鎖/內存、重啟死掉的Dispatcher/Server用戶進程異常終止、定期巡檢process startup, cleanup of aborted processes
RECORecoverer分布式事務自動解決 (兩階段提交失敗)掛起分布式事務、定期重試遠程連接reco retry, distributed transaction
ARCnArchiver歸檔已滿在線日誌到歸檔目標地日誌切換、ARCHIVELOG模式啟用ARCH wait on SENDREQ, log file switch (arch incomplete)
LCKnLock ManagerRAC實例間全局鎖協調 (Global Enqueue Service)RAC環境、跨實例鎖請求gc cr block busy, gc current block busy
DnnnDispatcher共享服務器架構:多路用戶連接複用少量Server進程MTS/Shared Server啟用、網絡連接請求dispatcher timer, virtual circuit status

核心協作流程深度剖析

1. 寫入路徑:用戶修改 → LGWR → DBWR → CKPT

  1. 用戶進程修改緩衝區 → 標記「髒」,生成REDO向量寫入Log Buffer。
  2. Commit → LGWR同步寫入Online Redo Log (LGWR等待log file sync)。
  3. DBWR異步批量刷髒塊到數據文件 (db file parallel write),受DB_WRITER_PROCESSES、DB_BLOCK_WRITE_BATCH控制。
  4. Checkpoint觸發 → CKPT更新所有數據文件頭Checkpoint SCN,通知DBWR加速刷該SCN前的髒塊。

調優杠桿:
- 增加DB_WRITER_PROCESSES (CPU核心數/2) 並行寫入。
- 調大LOG_BUFFER減少LGWR喚醒頻率。
- 設置FAST_START_MTTR_TARGET自動調節檢查點頻率。

2. 故障恢復:PMON清理 → SMON前滾/回滾

  • 進程失敗:PMON檢測 → 回滾未提交事務、釋放行鎖/表鎖、釋放PGA/UGA、從V$SESSION移除、重啟死亡Dispatcher/Shared Server。
  • 實例崩潰恢復:啟動階段SMON → 讀取Online Redo Log → 前滾所有已提交事務 (REDO) → 打開數據庫 → 後台回滾未提交事務 (UNDO)。

3. RAC全局鎖:LCK0-LCK9 + GES/GCS

  • 資源掌握權在Master實例,通過GCS (Global Cache Service) 傳輸塊、GES (Global Enqueue Service) 管理鎖。
  • 等待事件gc cr/current block busy 表示跨實例塊傳輸/鎖轉換延遲,優化:增加互聯帶寬、調整DB_FILE_MULTIBLOCK_READ_COUNT、分區表消除熱點。

4. 共享服務器:Dispatcher (Dnnn) + Shared Server (Snnn)

  • 用戶連接 → Listener → Dispatcher (虛擬電路) → Request Queue → Shared Server處理 → Response Queue → Dispatcher → 用戶。
  • 關鍵參數:DISPATCHERS、MAX_DISPATCHERS、SHARED_SERVERS、MAX_SHARED_SERVERS、CIRCUITS。
  • 適用場景:高併發短連接 (Web連接池)、內存受限環境。長事務、批量操作建議專用服務器。

監控與診斷SQL工具箱

-- 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從「看現象」進階到「懂本質」的必修課。

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