在作業系統層面,進程是執行一系列操作步驟的基本單位,擁有專屬的儲存區域。Oracle 針對效能最大化設計了獨特的進程架構,主要分為單進程實例與多進程實例兩種模式。
單進程 Oracle(單用戶模式):所有 Oracle 代碼由單一進程執行,資料庫應用與 Oracle 核心代碼無法分離,僅支援單一用戶存取,典型環境如 MS-DOS 平台。
多進程 Oracle(多用戶模式):採用多進程協同執行 Oracle 不同組件,每個連接用戶對應一個專屬進程。此架構下進程分為兩大類:
服務器進程專責處理連接實例的用戶進程請求,主要執行三大任務:
值得注意的是,當應用與 Oracle 部署於同一台機器且不經網路通訊時,用戶進程與對應的服務器進程可合併為單一進程以降低系統開銷;跨機器部署時則需透過專用服務器進程通訊。
為了實現最佳效能並協調多用戶並發,Oracle 引入多種後台進程,實例啟動時自動建立。以下是核心後台進程的功能詳解:
負責緩衝區管理,核心任務是將「髒緩衝區」寫入資料檔案以保持緩衝區「乾淨」。採用 LRU(Least Recently Used)演算法確保記憶體中保留最近使用的資料塊,將 I/O 降至最低。
觸發 DBWR 寫入的四種情境:
平台支援多 DBWR 進程(由 DB_WRITERS 參數控制),可將不同塊分散寫入多磁碟提升 I/O 效能。
管理重做日誌緩衝區,將日誌項同步寫入線上重做日誌檔案組。觸發寫入條件包括:用戶提交交易、每 3 秒、日誌緩衝區 1/3 滿、DBWR 寫入修改緩衝區時。採用快速提交機制,COMMIT 記錄立即寫入日誌緩衝區並分配 SCN(系統變更號),資料塊修改則延遲寫入。
檢查點發生時更新所有資料檔案標頭。通常由 LGWR 執行,但當檢查點明顯影響效能時可啟用獨立 CKPT 進程分擔負擔(參數 CHECKPOINT_PROCESS 控制)。注意:CKPT 不負責寫入資料塊,該工作由 DBWR 完成。
實例啟動時執行實例恢復,清理不再使用的臨時段。RAC 環境下負責故障 CPU 或實例的恢復。定期喚醒檢查或由其他進程呼叫。
用戶進程故障時執行進程恢復:清理記憶體、釋放資源、重置活動交易表狀態、釋放鎖、從活動進程表移除故障進程 ID。定期檢查調度進程與服務器進程狀態,必要時重啟(排除刻意刪除的進程)。
僅存在於啟用分散式交易的系統(DISTRIBUTED_TRANSACTIONS > 0)。自動解決分散式交易中的故障,定期嘗試連接遠端資料庫處理懸掛交易。
資料庫運行於 ARCHIVELOG 模式且啟用自動歸檔時存在,負責將填滿的線上日誌檔案複製至指定儲存裝置。
RAC 環境專用,最多 10 個進程(LCK0-LCK9),處理實例間的鎖協調。
支援多執行緒伺服器(MTS)架構,讓多用戶進程共享有限的服務器進程。每種網路協定至少需要一個調度進程,可動態增減。網路接收器進程負責連接請求分發,非 Oracle 實例組成部分。
MTS 架構下的共享服務器進程,由調度進程分派請求處理。