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

Oracle 實例架構深度解析:SGA/PGA 記憶體結構與五大背景進程職責

     編輯:Oracle 資料庫基礎

實例是存取資料庫的動態引擎,由記憶體結構 (SGA/PGA) 與背景進程組成。本文深度剖析實例啟動參數來源、SGA/PGA 記憶體劃分、五大核心背景進程 (PMON/SMON/DBWR/LGWR/CKPT) 職責與協作機制。

一、 實例啟動與參數來源

  • 參數檔案:PFILE (init.ora) 文字檔 或 SPFILE (spfile.ora) 二進位檔
  • SPFILE 支援 ALTER SYSTEM SET ... SCOPE=SPFILE 動態持久化,PFILE 需手動編輯
  • 啟動順序:NOMOUNT → MOUNT → OPEN,各階段讀取參數、掛載控制檔、開啟資料檔/Redo Log
  • 修改參數生效時機:SCOPE=MEMORY 即時、SCOPE=SPFILE 下次啟動、SCOPE=BOTH 兩者兼備

二、 記憶體結構:SGA vs PGA

SGA 核心子元件 (回顧)

  • Shared Pool:Library Cache + Dictionary Cache + Result Cache
  • Database Buffer Cache:Default/Keep/Recycle 三池 + 多區塊大小
  • Redo Log Buffer:LGWR 寫入前暫存
  • Large Pool:RMAN、共用伺服器 UGA、平行訊息
  • Java Pool / Streams Pool / Fixed SGA

PGA 工作區管理

  • 手動模式 (舊版):SORT_AREA_SIZE, HASH_AREA_SIZE
  • 自動模式 (9i+ 推薦):PGA_AGGREGATE_TARGET 總量控制,Oracle 自動分配排序/雜湊/位圖合併記憶體
  • 12c+ 硬限制:PGA_AGGREGATE_LIMIT 防止單一會話耗盡 PGA 導致 ORA-04036

三、 五大核心背景進程職責圖譜

維度SGA (System Global Area)PGA (Program Global Area)
共享性**所有**伺服器/背景進程共享**單一**進程專用 (專用伺服器/共用伺服器/背景進程)
生命週期實例啟動分配,關閉釋放進程建立分配,終止釋放
主要用途資料緩存、執行計畫、Redo 暫存、鎖結構排序/雜湊工作區、會話資訊、游標狀態、PL/SQL 集合
關鍵參數SGA_TARGET, SGA_MAX_SIZE, 各 *_SIZEPGA_AGGREGATE_TARGET, PGA_AGGREGATE_LIMIT (12c+)

四、 進程協作關鍵流程

1. 交易提交流程

  1. User Process 產生 Redo Vector → Redo Log Buffer
  2. LGWR 寫入線上 Redo Log (同步等待 log file sync)
  3. User Process 釋放鎖,回傳 COMMIT 完成
  4. **DBWR 稍後非同步**寫入髒塊至資料檔

2. Checkpoint 流程

  1. CKPT 計算目標 Checkpoint SCN
  2. 更新控制檔、資料檔標頭 Checkpoint SCN
  3. 通知 DBWR 寫入該 SCN 前所有髒塊
  4. 完成後推進 Checkpoint 位置

3. 執行個體恢復 (SMON)

  1. OPEN 階段偵測資料檔 Checkpoint SCN < 控制檔 SCN
  2. 2. **前滾**:從最後 Checkpoint 讀取 Redo Log 重做所有變更 3. **回滾**:利用 Undo 回滾未提交交易 4. 釋放鎖,資料庫開放存取

五、 額外重要背景進程 (10g+)

進程全名核心職責觸發條件/頻率關鍵等待事件
PMONProcess Monitor清理失敗進程資源:釋放鎖、回滾未提交交易、釋放 SGA/PGA、清理暫時段偵測到進程異常終止時pmon timer
SMONSystem Monitor執行個體恢復 (前滾/回滾)、合併臨時段空間、清理臨時段啟動 MOUNT 階段、定期喚醒smon timer
DBWRDatabase Writer將 Buffer Cache 中**髒塊**寫入資料檔,採用 LRU/LRUW 清單演算法Checkpoint、Buffer Cache 壓力、定期 (每 3 秒檢查)db file parallel write, free buffer waits
LGWRLog Writer將 Redo Log Buffer **循序寫入**線上 Redo Log 檔,保證交易持久性COMMIT、每 3 秒、1/3 滿、1MB、DBWR 前log file sync, log file parallel write
CKPTCheckpoint更新控制檔/資料檔標頭的 Checkpoint SCN,指引 DBWR 寫入範圍,縮短恢復時間Log Switch、LOG_CHECKPOINT_INTERVAL/TIMEOUT、手動control file sequential read

六、 監控與診斷實用查詢

-- 背景進程狀態
SELECT pname, program, status FROM v$bgprocess WHERE pname NOT LIKE 'PSEUDO%';

-- 進程等待事件
SELECT sid, event, wait_time, seconds_in_wait FROM v$session_wait WHERE sid IN (SELECT sid FROM v$bgprocess);

-- Checkpoint 統計
SELECT name, value FROM v$sysstat WHERE name LIKE '%checkpoint%';

-- 實例啟動時間
SELECT startup_time FROM v$instance;

七、 架構師視角:實例設計決策

  1. 專用伺服器 vs 共用伺服器:高併發短連線 → 共用伺服器 (節省 PGA/Process);長連線/複雜操作 → 專用伺服器
  2. PGA 管理策略:啟用自動 PGA_AGGREGATE_TARGET,設定 PGA_AGGREGATE_LIMIT 防止失控
  3. Checkpoint 頻率:LOG_CHECKPOINT_TIMEOUT=1800 (30 分鐘) 平衡恢復時間與 DBWR 壓力
  4. Redo Log 群組/大小:至少 3 組,每組 2 成員,大小使 Switch 間隔 15~30 分鐘
  5. RAC 多實例:共享資料庫、獨立 SGA/PGA/背景進程,透過 GCS/GES 協調緩存一致性

實例是資料庫的「心臟與神經系統」,記憶體結構決定處理容量,背景進程保障資料一致性與持久性。深入理解五大核心進程協作機制,是故障診斷、效能調校、高可用架構設計的核心能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
進程功能
MMON/MMNLAWR 快照收集、閾值告警、自動統計收集
RBAL/ARBnASM 磁碟重新平衡 (RAC/ASM 環境)
FBDAFlashback Data Archive 歸檔 (11g+)
DIAG診斷框架、健康監控、自動問題分析
VKTM高精度時間基準 (RAC/Exadata)