首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 記憶體架構全景圖:SGA 與 PGA 核心組件、參數與管理實戰

     編輯:Oracle 資料庫相關知識

實例記憶體雙支柱

區域全稱共享性生命週期核心用途
SGASystem Global Area**所有進程共享**Instance 啟動~關閉資料快取、SQL 共享、Redo 緩衝、大型操作記憶體
PGAProgram Global Area**單一進程專用**Process 建立~終止排序、雜湊、游標狀態、Session 資訊

SGA 核心組件詳細解析

1. Database Buffer Cache (資料庫緩衝區快取)

  • 參數:DB_CACHE_SIZE (預設 Pool)、DB_KEEP_CACHE_SIZE、DB_RECYCLE_CACHE_SIZE、DB_nK_CACHE_SIZE (非標準 Block Size)。
  • 三大 Pool 策略:
    • DEFAULT:一般物件,LRU 淘汰。
    • KEEP:熱點小表 (ALTER TABLE t STORAGE (BUFFER_POOL KEEP)),**不被淘汰**。
    • RECYCLE:大掃描表,**快速淘汰**避免汙染 DEFAULT。
  • 關鍵指標:V$BH 觀察 Buffer Header 狀態 (free/pinned/dirty)。

2. Redo Log Buffer

  • 參數:LOG_BUFFER (靜態參數,通常 1~10 MB,極高寫入負載可調大)。
  • LGWR 將其內容寫入 Online Redo Log,**Commit 必須等待 LGWR 寫入完成 (除非 COMMIT_WRITE 異步)**。

3. Shared Pool (共享池) — 最複雜、最關鍵

子組件功能關鍵參數/視圖
Library Cache (庫快取)已解析 SQL/PLSQL 程式碼、執行計畫SHARED_POOL_SIZE, V$LIBRARYCACHE (GETS/PINS/RELOADS/INVALIDATIONS)
Shared SQL AreaSQL 文本、解析樹、執行計畫Cursor Sharing: CURSOR_SHARING=EXACT/SIMILAR/FORCE
Private SQL AreaBind 變數值、執行時期狀態、工作區**Dedicated Server 在 PGA**;**Shared Server 在 SGA**
Dictionary Cache (Row Cache)資料字典資訊 (用戶、表、權限、同義詞...)V$ROWCACHE (GETS/GETMISSES)
Result Cache (11g+)查詢結果集快取RESULT_CACHE_MODE, V$RESULT_CACHE_STATISTICS
Open_Cursors 參數 直接限制 Library Cache 可容納游標數,建議設 1000~3000 視應用而定。

4. Java Pool

  • 參數:JAVA_POOL_SIZE (預設 ~32MB),Java Stored Procedure / EJB / JVM 物件儲存。

5. Large Pool

  • 參數:LARGE_POOL_SIZE (預設 8~16MB)。
  • 用途:Shared Server (MTS) UGA、RMAN 備份緩衝、Parallel Query 訊息緩衝、DBWR Slave。
  • 若未設定,上述操作會佔用 Shared Pool → **嚴重碎片化風險**。

6. Streams Pool / In-Memory Area (12c+)

  • STREAMS_POOL_SIZE:GoldenGate/Streams 捕捉/應用。
  • INMEMORY_SIZE:In-Memory Column Store 專用區 (獨立於 Buffer Cache)。

PGA 核心管理

  • 參數:PGA_AGGREGATE_TARGET (10g+ 自動管理) / PGA_AGGREGATE_LIMIT (12c+ 硬上限防暴增)。
  • 工作區:Sort Area, Hash Area, Bitmap Merge, Write Buffer。
  • 監控:V$PGASTAT, V$PROCESS_MEMORY, V$SQL_WORKAREA_ACTIVE。
  • **致命風險**:PGA 總和超過實體記憶體 → OS Swap → 效能崩潰。必須設 PGA_AGGREGATE_LIMIT 並監控 V$PGASTAT "over allocation count"。

記憶體規劃黃金法則 (實體 RAM 基礎)


OS 保留          : 10~20% (或固定 8~16 GB)
SGA_TARGET       : 50~70% (含 Buffer Cache, Shared Pool, Large Pool, Java Pool, Redo Buffer)
PGA_AGGREGATE_TARGET : 20~30%
------------------------------------------------
總和 < 實體 RAM (預留 OS、監控代理、備份進程等)

自動記憶體管理 (AMM/ASMM) 演進

模式參數特點
手動 (9i-)個別參數需人工平衡,彈性差
ASMM (10g+)SGA_TARGET + PGA_AGGREGATE_TARGETSGA 內部自動再平衡,PGA 獨立管理
AMM (11g+)MEMORY_TARGET (含 MEMORY_MAX_TARGET)SGA+PGA 統一池,OS /dev/shm 支援,**不適用 HugePages/Large Pages**
**生產建議**:使用 **ASMM + HugePages** (Linux) / **Large Pages** (Solaris/AIX) 鎖定 SGA 實體記憶體,避免 Swap,PGA 獨立設 Target/Limit。

結語

Oracle 記憶體架構以 **SGA 共享、PGA 專用** 為核心,Buffer Cache 多 Pool 隔離、Shared Pool 子組件精細化、PGA 自動管理與硬限制,構成現代記憶體管理體系。**ASMM + HugePages + PGA Limit** 是高載生產環境的鐵三角配置。定期審視 V$SGASTAT, V$PGASTAT, V$LIBRARYCACHE 關鍵比率,保持記憶體健康度。

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