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

Oracle 自動記憶體管理 (AMM) 設定步驟與 MEMORY_TARGET 計算指南

     編輯:Oracle 資料庫相關知識

Oracle 11g 引入自動記憶體管理 (AMM),透過單一參數 MEMORY_TARGET 統一管理 SGA 與 PGA,大幅簡化記憶體調校。本文提供啟用 AMM 完整步驟、參數計算公式與動態/靜態參數設定差異說明。

啟用 AMM 前置條件

  • 需關閉資料庫重啟 (SHUTDOWN IMMEDIATE → STARTUP)
  • 作業系統需支援 /dev/shm 共享記憶體檔案系統 (Linux),且大小 ≥ MEMORY_MAX_TARGET

五步驟設定流程

1. 確認目前 SGA/PGA 目標值

SHOW PARAMETER TARGET;
-- 關鍵參數:SGA_TARGET, PGA_AGGREGATE_TARGET

2. 查詢啟動以來 PGA 實際最大使用量

SELECT VALUE FROM V$PGASTAT WHERE NAME = 'maximum PGA allocated';

3. 計算 MEMORY_TARGET

公式: MEMORY_TARGET = SGA_TARGET + MAX(PGA_AGGREGATE_TARGET, maximum PGA allocated)

取 PGA 設定值與實際峰值較大者,確保不會因記憶體不足導致 ORA-04030。

4. 設定參數 (SPFILE 模式)

-- 先設定上限 (靜態參數,需重啟生效)
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

5. 重啟資料庫生效

SHUTDOWN IMMEDIATE;
STARTUP;

驗證 AMM 啟用狀態

SHOW PARAMETER MEMORY;
-- MEMORY_TARGET, MEMORY_MAX_TARGET 應顯示設定值
-- SGA_TARGET, PGA_AGGREGATE_TARGET 應為 0 (由 AMM 自動管理)

SELECT * FROM V$MEMORY_DYNAMIC_COMPONENTS;
-- 觀察 SGA/PGA 元件自動調整歷程

常見問題與注意事項

  • Linux /dev/shm 空間不足:掛載時指定 size=4G 或修改 /etc/fstab
  • HugePages 與 AMM 互斥:啟用 AMM 時勿設定 HugePages,否則資料庫啟動失敗
  • 動態調整:MEMORY_TARGET 可線上調整,但不得超過 MEMORY_MAX_TARGET
  • 12c 以降:建議改用 SGA_TARGET + PGA_AGGREGATE_TARGET (ASMM) 配合 MEMORY_TARGET=0,靈活度更高
最佳實務:上線前進行壓力測試觀察 V$MEMORY_RESIZE_OPS,確認自動調整行為符合預期,再套用至生產環境。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved