SGA(System Global Area)是 Oracle 執行個體最關鍵的共享記憶體區域,由多個功能獨立的組件構成。理解各組件職責與交互關係,是記憶體調優的基石。
9i 引入多池機制,解決「熱門資料被冷門資料擠出」問題:
注意:三池記憶體互不共享,需獨立規劃大小。9i 起支援多區塊大小(2K/4K/8K/16K/32K),對應 DB_nK_CACHE_SIZE 參數。
短查詢中硬解析可佔總回應時間 2/3。不使用繫結變數會導致:
對策:短頻查詢強制使用繫結變數;長跑統計查詢可考慮字面值避免計畫固化。
STATISTICS_LEVEL = TYPICAL | ALL
SGA_TARGET = 目標總大小(動態可調)
SGA_MAX_SIZE = 硬性上限(修改需重啟)
可為上述組件設定最小值,Oracle 不會自動縮減至該值以下。
單進程可定址空間約 1.75GB,故 SGA + PGA ≤ 1.75GB。64 位元無此限制。
| 記憶體規格 | 架構 | SHARED_POOL_SIZE | DB_CACHE_SIZE | 備註 |
|---|---|---|---|---|
| 1GB | 32-bit | 100MB | 0.5GB | 扣除 OS、PGA、其他組件後剩餘給 Buffer Cache |
| 2GB | 32-bit | 150MB | 1.25GB | 接近 32-bit 上限,需謹慎評估 PGA 需求 |
| 4GB | 64-bit | 200MB | 2.5GB | 標準 OLTP 配置起點 |
| 8GB | 64-bit | 400MB | 5GB | 大型 OLTP / 混合負載 |
| 12GB | 64-bit | 500MB | 8GB | 共享池不宜過大,優先擴充 Buffer Cache |
JAVA_POOL_SIZE:無 Java 應用時 30MB 足矣LOG_BUFFER:一般 1MB、大型交易系統 2MB,再大無意義(1/3 滿即觸發寫入)LARGE_POOL_SIZE:專用伺服器模式 30MB 即可;共享伺服器模式視 UGA 需求擴充V$SGASTAT、V$SGA_DYNAMIC_COMPONENTS、V$SHARED_POOL_ADVICE、V$DB_CACHE_ADVICE結語:以上配置為「避坑基準線」,生產環境必須結合 Statspack/AWR 報告、實際負載特徵進行精細調優。沒有通用的完美參數,只有適配業務的最佳配置。