在 Oracle 資料庫架構中,「從屬進程」扮演著關鍵角色,它們協助主要背景進程處理特定任務,提升系統吞吐量與並行處理能力。本文將深入剖析兩大核心類型——I/O 從屬進程與並行查詢從屬進程,幫助 DBA 與開發人員更透徹地掌握資料庫內部運作機制。
I/O 從屬進程的主要使命是為不支援原生非同步 I/O 的系統或裝置(如磁帶機)模擬非同步 I/O 行為。以磁帶備份為例,磁帶裝置速度較慢且通常不支援非同步操作。若無 I/O 從屬進程,發起寫入請求的進程(呼叫者)必須同步等待資料寫入完成,嚴重阻塞主流程。
引入 I/O 從屬進程後,流程變為:呼叫者收集大量資料 → 交給 I/O 從屬進程(寫入器)處理 → 寫入器完成實際寫入並通知呼叫者 → 呼叫者從待寫清單移除該批資料 → 繼續收集下一批資料。這種生產者-消費者模式讓主進程脫離慢速裝置等待,顯著提升整體吞吐量。
專為 RMAN 磁帶操作設計的布林參數(預設 FALSE)。
指定 DBW0 進程使用的 I/O 從屬進程數量(預設 0,即不啟用)。
I1nnI2nn其中 nn 為序號。
自 Oracle 7.1.6 引入並行查詢功能,針對 SELECT、CREATE TABLE、CREATE INDEX、UPDATE 等 SQL,優化器可生成包含多個子執行計劃的並行執行計劃。各子計劃由不同的並行查詢從屬進程(Pnnn)同時執行,最終由並行查詢協調器(原發起查詢的伺服器進程)彙總結果。目標是以極小時間完成原本需串行耗費大量時間的操作。
假設一張大表分佈於 10 個資料檔,伺服器擁有 16 CPU 核心。若採用串行查詢,單一進程須循序讀取所有資料;若拆解為 32 個並行片段,可充分利用多核優勢,大幅縮短回應時間。
Pnnn,實際執行掃描、連接、排序等具體運算工作。| 從屬進程類型 | 核心用途 | 關鍵參數 | 進程名稱前綴 |
|---|---|---|---|
| I/O 從屬進程 | 模擬非同步 I/O、磁帶備份加速 | DBWR_IO_SLAVES、BACKUP_TAPE_IO_SLAVES | I1nn (DBWR)、I2nn (LGWR) |
| 並行查詢從屬進程 | 大型 SQL 並行執行 | PARALLEL_MAX_SERVERS 等 | Pnnn |
理解從屬進程機制,有助於在效能調校、備份策略制定、並行度規劃等場景做出更精準決策。建議 DBA 定期監控 V$PROCESS、V$PX_SESSION 等視圖,掌握從屬進程使用狀況,避免資源爭用或配置不足導致的效能瓶頸。