Oracle 11g 引入自動記憶體管理 (AMM),透過單一參數 MEMORY_TARGET 統一管理 SGA 與 PGA,大幅簡化記憶體調校。本文提供啟用 AMM 完整步驟、參數計算公式與動態/靜態參數設定差異說明。
SHUTDOWN IMMEDIATE → STARTUP)/dev/shm 共享記憶體檔案系統 (Linux),且大小 ≥ MEMORY_MAX_TARGETSHOW PARAMETER TARGET;
-- 關鍵參數:SGA_TARGET, PGA_AGGREGATE_TARGET
SELECT VALUE FROM V$PGASTAT WHERE NAME = 'maximum PGA allocated';
公式: MEMORY_TARGET = SGA_TARGET + MAX(PGA_AGGREGATE_TARGET, maximum PGA allocated)
取 PGA 設定值與實際峰值較大者,確保不會因記憶體不足導致 ORA-04030。
-- 先設定上限 (靜態參數,需重啟生效)
ALTER SYSTEM SET MEMORY_MAX_TARGET = 2G SCOPE = SPFILE;
-- 再設定目標值 (動態參數,可立即生效)
ALTER SYSTEM SET MEMORY_TARGET = 2G SCOPE = BOTH; -- 或 SPFILE
-- 若使用 PFILE (init.ora) 需手動編輯:
-- memory_max_target = 2G
-- memory_target = 2G
SHUTDOWN IMMEDIATE;
STARTUP;
SHOW PARAMETER MEMORY;
-- MEMORY_TARGET, MEMORY_MAX_TARGET 應顯示設定值
-- SGA_TARGET, PGA_AGGREGATE_TARGET 應為 0 (由 AMM 自動管理)
SELECT * FROM V$MEMORY_DYNAMIC_COMPONENTS;
-- 觀察 SGA/PGA 元件自動調整歷程
size=4G 或修改 /etc/fstabMEMORY_TARGET 可線上調整,但不得超過 MEMORY_MAX_TARGETSGA_TARGET + PGA_AGGREGATE_TARGET (ASMM) 配合 MEMORY_TARGET=0,靈活度更高最佳實務:上線前進行壓力測試觀察 V$MEMORY_RESIZE_OPS,確認自動調整行為符合預期,再套用至生產環境。