Oracle 進程架構分為使用者進程、伺服器進程 (專用/共用) 與背景進程三大類。本文詳細說明各進程啟動時機、互動流程、五大核心背景進程 (PMON/SMON/DBWn/LGWR/CKPT) 具體職責與異常影響,建立進程層面的故障排查心智模型。
| 類別 | 啟動時機 | 主要職責 | 數量關係 |
|---|---|---|---|
| 使用者進程 | 用戶端工具啟動連線時 (SQL*Plus、JDBC、ODP.NET) | 發送 SQL 請求、接收結果、管理 Session 狀態 | 1:1 對應用戶連線 |
| 伺服器進程 | Session 建立時 (專用) / Dispatcher 分派時 (共用) | 解析/執行 SQL、存取 SGA/資料檔、回傳結果 | 專用: 1:1 對 Session 共用: 多 Session 共用少量進程 |
| 背景進程 | 執行個體啟動 (STARTUP) 時自動啟動 | 非同步執行核心維護工作 (寫入、復原、監控、清理) | 固定核心組 + 功能性可選組 |
LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_MTTR_TARGET (10g+)。| 進程 | 功能 | 啟用條件 |
|---|---|---|
| ARCH | 歸檔 Redo Log 至歸檔目的地 | ARCHIVELOG 模式 |
| RECO | 解決分散式交易 In-doubt 狀態 | 分散式交易環境 |
| MMON / MMNL | AWR 快照收集 / ASH 即時取樣 | STATISTICS_LEVEL=TYPICAL/ALL |
| CJQ0 | Job Queue 排程執行 (DBMS_JOB/SCHEDULER) | JOB_QUEUE_PROCESSES > 0 |
| QMNn | Advanced Queuing 佇列監控 | AQ 功能啟用 |
| SMCO | Space Management Coordinator (12c+ 自動段空間整理) | 自動段空間管理 |
-- 背景進程
SELECT name, description FROM v$bgprocess WHERE paddr != '00';
-- 伺服器進程 (專用/共用)
SELECT s.sid, s.serial#, s.username, p.spid, p.program, s.server
FROM v$session s JOIN v$process p ON s.paddr = p.addr
WHERE s.type != 'BACKGROUND';
-- 使用者進程對應 OS PID (Linux/Unix)
-- Windows 查詢 v$process.spid 即為 Thread ID
| 現象 | 疑似進程 | 檢查方向 |
|---|---|---|
| 大量 Session 殭屍、鎖不釋放 | PMON | PMON 是否存活、清理速度、V$SESSION_WAIT 鎖等待 |
| 啟動極慢、Instance Recovery 久 | SMON/CKPT | Redo Log 大小、Checkpoint 頻率、FAST_START_MTTR_TARGET |
| Commit 延遲高、log file sync 等待 | LGWR | Redo Log 檔案 IO 延遲、檔案多工成員磁碟爭用、LOG_BUFFER 大小 |
| Checkpoint not complete、Log Switch 頻繁 | CKPT/DBW | Redo Log Group 數量/大小、DBW 寫入吞吐、LOG_CHECKPOINT_INTERVAL |
| 歸檔目的地空間滿、資料庫 Hang | ARCH | 歸檔目的地空間、LOG_ARCHIVE_DEST_n 狀態、V$ARCHIVE_DEST_STATUS |
理解進程分工與互動,能從「等待事件」快速定位到具體背景進程瓶頸,實施精準調優與故障排除。