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

Oracle 資料庫進程架構全景深度解析:SGA/PGA、背景進程、SQL 執行流程與啟動機制

     編輯:Oracle 資料庫基礎

記憶體架構雙核心:SGA 與 PGA

SGA (System Global Area) — 實例級共享記憶體

  • 實例啟動時分配,核心組件:
    • Database Buffer Cache:儲存資料檔資料塊,LRU 算法管理,塊大小由 DB_BLOCK_SIZE 決定 (2K/4K/8K/16K/32K)
    • Redo Log Buffer:重做日誌條目,LOG_BUFFER 設定大小
    • Shared Pool:Library Cache、Data Dictionary Cache
    • Large Pool:備份/恢復、共享伺服器、平行執行 (可選)
    • Java Pool:Java 程式碼執行 (可選)
  • 子緩存:DB_KEEP_CACHE_SIZE、DB_RECYCLE_CACHE_SIZE
  • 自動管理:ALTER SYSTEM SET DB_CACHE_ADVICE=ON;

PGA (Program Global Area) — 進程級私有記憶體

  • 伺服器進程啟動時分配
  • 包含:排序區、雜湊區、位圖合併區、會話資訊
  • 11g+ 支援 PGA_AGGREGATE_TARGET 自動管理

進程架構三大類

1. 使用者進程 (User Process)

  • 客戶端應用程式 (SQL*Plus, JDBC, OCI 等)
  • 發起連線請求,不可直接與資料庫互動

2. 伺服器進程 (Server Process)

  • 連線建立後產生,執行用戶 SQL
  • 專用伺服器 (Dedicated) vs 共享伺服器 (Shared/MTS)

3. 背景進程 (Background Processes) — 核心守護者

進程全名核心職責觸發寫入/執行條件
DBWnDatabase Writer將緩衝區髒塊寫回資料檔Checkpoint、髒塊達閾值、緩衝區空間不足、Timeout(3秒)、Tablespace OFFLINE/READ ONLY、DROP/TRUNCATE、BEGIN BACKUP
LGWRLog Writer將 Redo Log Buffer 寫入線上重做日誌檔COMMIT、1/3 滿、1MB redo、每 3 秒、DBWn 寫入前
SMONSystem Monitor執行個體恢復、空間合併、臨時段清理啟動時恢復、每 3 秒合併自由區段、啟動時清理臨時段
PMONProcess Monitor清理異常終止進程資源回滾未提交交易、釋放鎖/資源、重啟失效 Dispatcher
CKPTCheckpoint同步資料庫一致性點觸發 DBWn 寫髒塊、更新資料檔/控制檔標頭
ARCnArchiver歸檔線上重做日誌歸檔模式下自動備份填滿的日誌組

關鍵寫入流程:Redo 先行協議

用戶修改 → 產生 Redo 向量 → Redo Log Buffer
                                    ↓
                            LGWR 寫入線上重做日誌 (COMMIT 時強制)
                                    ↓
                            DBWn 稍後寫入髒塊至資料檔

確保 WAL (Write-Ahead Logging):任何資料塊修改持久化前,對應 Redo 已持久化。

SQL 執行參與進程矩陣

SQL 類型User ProcServer ProcDBWnLGWRCKPTSMONPMONARCn
SELECT✓✓✗✗✗✗✗✗
DML (INSERT/UPDATE/DELETE)✓✓延遲✓ (COMMIT)間接✗✗✗
COMMIT✓✓✗✓ (強制)✓✗✗✗
DDL✓✓✓✓✓✗✗✗
備份/恢復✓✓✓✓✓✓✗✓

啟動三階段機制

  1. NOMOUNT:讀取參數檔 → 啟動 SGA → 啟動背景進程
  2. MOUNT:讀取控制檔 (位置來自參數檔) → 掛載資料庫 (恢復操作在這階段)
  3. OPEN:讀取資料檔/重做日誌 → 核對一致性 → 通過則開啟,失敗則需恢復

總結:架構設計哲學

  • 關注點分離:記憶體 (SGA/PGA)、進程 (User/Server/BG)、儲存 (資料/控制/日誌/備份)
  • 非同步協作:LGWR/DBWn 解耦 Redo 產生與資料持久化
  • 自動化自癒:SMON/PMON/CKPT/ARCn 無人值守維護一致性與可用性
  • 彈性擴展:共享伺服器、平行執行、RAC 多實例
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved