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

Oracle 實例架構深度解析:記憶體結構 (SGA/PGA) 與背景進程全景圖

     編輯:Oracle 資料庫基礎

實例定義與啟動機制

實例 = SGA (系統全域區) + 背景進程。啟動時讀取參數檔 (PFILE 或 SPFILE),參數異動需重啟生效 (SPFILE 可動態修改部分參數)。一資料庫可被多實例存取 (RAC)。

一、記憶體結構雙核心

1. SGA (System Global Area) — 共享記憶體區

所有伺服器/背景進程共享,儲存資料庫資訊與控制資訊。位於實體記憶體,不足時溢寫虛擬記憶體。核心組件:

  • Shared Pool:Library Cache (SQL/PLSQL 執行計畫)、Dictionary Cache (資料字典)、Control Structures。效能關鍵區。
  • Database Buffer Cache:資料區塊副本 (Dirty/Free/Pinned),LRU 列表管理,減少物理 I/O。
  • Redo Log Buffer:循環緩衝區,暫存變更向量,LGWR 批次寫入 Redo Log File。
  • Large Pool / Java Pool / Streams Pool / In-Memory Area:特定功能專用區 (備份、Java、CDC、In-Memory Column Store)。

2. PGA (Program Global Area) — 專用記憶體區

每個伺服器/背景進程獨擁,生命週期隨進程建立/終止。儲存:

  • 排序區 / 雜湊區 (Sort/Hash Area)
  • 游標狀態資訊
  • PL/SQL 執行堆疊
  • 工作區 (Work Areas)

關鍵差異:SGA 共享、PGA 獨享。11g+ MEMORY_TARGET 自動管理總量,PGA_AGGREGATE_TARGET 控制 PGA 總上限。

二、五大核心背景進程

進程全名核心職責
PMONProcess Monitor進程失敗清理:釋放鎖、回滾未提交交易、釋放 SGA/PGA 資源、重新註冊監聽器
SMONSystem Monitor執行個體恢復 (開啟資料庫時前滾/回滾)、合併臨時段、清理臨時檔案
DBWRDatabase Writer將 Buffer Cache 中 Dirty Buffer 寫入資料檔 (LRU/Checkpoint/表空間離線觸發)
LGWRLog Writer將 Redo Log Buffer 寫入 Online Redo Log Files (Commit/1/3 秒/1MB/切換觸發),保證持久性
CKPTCheckpoint更新控制檔與資料檔檢查點資訊 (SCN)、觸發 DBWR 寫入、縮短恢復時間

其他重要進程

  • ARCn:歸檔進程,將填滿的 Redo Log 複製至歸檔目的地。
  • RECO:分散式交易恢復,解決雙階段提交掛起交易。
  • MMON / MMNL:AWR 快照收集、閾值告警、Active Session History 取樣。
  • CJQ0:Job Queue 排程器。
  • Dnnn / Snnn:Dispatcher / Shared Server 進程 (共享伺服器架構)。

實例啟動三階段

  1. NOMOUNT:讀取參數檔 → 配置 SGA/PGA → 啟動背景進程。僅需參數檔。
  2. MOUNT:開啟控制檔 → 確認資料檔/Redo Log 路徑。未校驗資料一致性。
  3. OPEN:開啟資料檔/Redo Log → 線上 Redo 可用 → 允許用戶存取。完成恢復 (如需)。

總結

實例是 Oracle 的「心臟與神經系統」。SGA 決定讀取效能,PGA 決定運算效能,五大核心進程保證 ACID 與高可用。深入理解各組件交互與參數調優 (如 DB_CACHE_SIZE, SHARED_POOL_SIZE, PGA_AGGREGATE_TARGET, LOG_BUFFER),是高階 DBA 必修課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved