Oracle 實例記憶體分配核心原則
在配置 Oracle 專用伺服器時,記憶體分配遵循核心原則:Oracle 實例總記憶體(SGA + PGA)通常佔系統物理記憶體的 60%~80%。具體比例視物理記憶體大小而定:4GB 以上建議分配 80% 以上,2GB 左右則分配 60%~70%。
記憶體分配計算公式
總可用記憶體 S = PGA + SGA_MAX_SIZE = 物理記憶體 × 80%(或 60%~70%)
- OLTP 系統:PGA 佔 SGA 的 1/4,SGA 佔總記憶體 80%
- DSS 系統:PGA 與 SGA 各佔總記憶體 50%
SGA 內部組件建議分配
DB_CACHE_SIZE = SGA 的 60%
SHARED_POOL_SIZE = SGA_MAX_SIZE - DB_CACHE_SIZE - 160MB(或 SGA 的 35% 左右)
JAVA_POOL_SIZE = 64MB
LARGE_POOL_SIZE = 16MB
LOG_BUFFER = 2MB
不同物理記憶體規格的具體配置範例
1. 4GB 物理記憶體(OLTP 環境)
- 總可用 S = 3200MB
- SGA = 2560MB(80%)
- DB_CACHE_SIZE = 1536MB(資料緩衝區、髒資料暫存)
- SHARED_POOL_SIZE = 864MB(SQL/PLSQL 程式碼、資料字典快取)
- JAVA_POOL_SIZE = 64MB
- LARGE_POOL_SIZE = 16MB(備份恢復、共享伺服器 UGA)
- LOG_BUFFER = 2MB
- PGA = 640MB
2. 4GB 物理記憶體(DSS 環境)
- SGA = 1600MB(50%)
- DB_CACHE_SIZE = 960MB
- SHARED_POOL_SIZE = 480MB
- JAVA_POOL_SIZE = 64MB
- LARGE_POOL_SIZE = 16MB
- LOG_BUFFER = 2MB
- PGA = 800MB
3. 2GB 物理記憶體(OLTP 環境)
- 總可用 S = 1200MB
- SGA = 960MB(80%)
- DB_CACHE_SIZE = 576MB
- SHARED_POOL_SIZE = 224MB
- JAVA_POOL_SIZE = 64MB
- LARGE_POOL_SIZE = 16MB
- LOG_BUFFER = 2MB
- PGA = 240MB
4. 2GB 物理記憶體(DSS 環境)
- SGA = 600MB(50%)
- DB_CACHE_SIZE = 360MB
- SHARED_POOL_SIZE = 144MB
- JAVA_POOL_SIZE = 32MB
- LARGE_POOL_SIZE = 16MB
- LOG_BUFFER = 2MB
- PGA = 240MB
5. 8GB 物理記憶體(OLTP 環境)
- 總可用 S = 6400MB
- SGA = 5120MB(80%)
- DB_CACHE_SIZE = 3072MB
- SHARED_POOL_SIZE = 1864MB
- JAVA_POOL_SIZE = 64MB
- LARGE_POOL_SIZE = 16MB
- LOG_BUFFER = 2MB
- PGA = 1024MB
6. 8GB 物理記憶體(DSS 環境)
- SGA = 3200MB(50%)
- DB_CACHE_SIZE = 1920MB
- SHARED_POOL_SIZE = 1120MB
- JAVA_POOL_SIZE = 64MB
- LARGE_POOL_SIZE = 16MB
- LOG_BUFFER = 2MB
- PGA = 3200MB
關鍵組件功能說明
- DB_CACHE_SIZE:資料塊緩衝區,包含查詢資料快取與未提交的髒資料
- SHARED_POOL_SIZE:共享池,儲存 SQL/PLSQL 執行計畫、程式碼與資料字典資訊,提升程式碼重用率
- JAVA_POOL_SIZE:Java 應用程式在資料庫端執行所需記憶體
- LARGE_POOL_SIZE:大池,用於 RMAN 備份恢復 I/O 緩衝、共享伺服器模式下的 UGA 分配
- LOG_BUFFER:重做日誌緩衝區,日誌資料寫入磁碟前的暫存區
註:以上配置為參考基準,實際生產環境需根據具體負載特徵、業務模式及監控指標(如 V$SGASTAT、V$PGASTAT)進行精細調優。