本文整理 Oracle 11g/12c 自動記憶體管理 (AMM) 與自動共享記憶體管理 (ASMM) 的關鍵參數、啟用步驟、動態視圖分析方法與粒度概念,供 DBA 記憶體調優參考。
-- 1. 查看當前目標參數 SHOW PARAMETER target; -- 關鍵輸出: -- memory_max_target = 0 -- memory_target = 0 -- pga_aggregate_target = 4779M -- sga_target = 14368M -- 2. 取得 PGA 實際峰值 SELECT value/1024/1024 FROM v$pgastat WHERE name='maximum PGA allocated'; -- 假設返回 4331M -- 3. 計算建議 MEMORY_TARGET -- MEMORY_TARGET >= SGA_TARGET + MAX(PGA_AGGREGATE_TARGET, PGA 峰值) -- 本例:14368 + 4779 = 19147M
| 視圖 | 用途 |
|---|---|
| V$MEMORY_TARGET_ADVICE | AMM 整體建議 |
| V$SGA_TARGET_ADVICE | SGA 目標值與預估 DB Time/Physical Reads 關係 |
| V$PGA_TARGET_ADVICE | PGA 目標值與預估緩存命中率關係 |
查詢示例:SELECT * FROM v$sga_target_advice ORDER BY sga_size; 觀察 ESTD_DB_TIME_FACTOR 接近 1 的最小 SGA_SIZE。
MEMORY_TARGET:動態參數,運行時可調,上限受 MEMORY_MAX_TARGET 限制。MEMORY_MAX_TARGET:靜態參數,需重啟生效,作為安全上限與未來擴容空間。MEMORY_TARGET,MEMORY_MAX_TARGET 默認等於它;若僅設 MAX,TARGET 默認 0(AMM 未啟用)。SELECT component, current_size, min_size, max_size, user_specified_size FROM v$memory_dynamic_components;
可見 shared pool、buffer cache、PGA Target 等元件的實際/最小/最大尺寸。
ALTER SYSTEM SET MEMORY_TARGET = 19147M SCOPE=BOTH; ALTER SYSTEM SET SGA_TARGET = 0 SCOPE=BOTH; ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0 SCOPE=BOTH;
注意:若 SGA_TARGET/PGA_AGGREGATE_TARGET 不為 0,其值會成為各自的最小值,限制 AMM 動態調節範圍。
SGA_MAX_SIZE 決定:< 1GB → 4MB;1~8GB → 16MB;>8GB → 32MB。SELECT * FROM v$sgainfo WHERE name='Granule Size';SGA_MAX_SIZE 為靜態上限,默認 = 所有元件初始值之和或 MEMORY_MAX_TARGET(AMM 時)。自動調節:Shared Pool、Buffer Cache、Large Pool、Java Pool、Streams Pool。
手動指定:Log Buffer、DB_nK_CACHE_SIZE、Keep/Recycle Pool。
SELECT ( (SELECT SUM(value) FROM v$sga) -
(SELECT current_size FROM v$sga_dynamic_free_memory) ) "SGA_TARGET"
FROM dual;
SHOW PARAMETER db_block_size(如 8KB)。DB_2K/4K/8K/16K/32K_CACHE_SIZE(標準塊不可設同尺寸快取)。DB_KEEP_CACHE_SIZE 控制(僅標準塊)。DB_RECYCLE_CACHE_SIZE 控制(僅標準塊)。SORT_AREA_SIZE、HASH_AREA_SIZE、BITMAP_MERGE_AREA_SIZE、CREATE_BITMAP_AREA_SIZE —— 建議改用 PGA_AGGREGATE_TARGET + AMM/ASMM。