首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 自動記憶體管理 (AMM) 深度解析:MEMORY_TARGET、SGA/PGA 參數調優指南

     編輯:Oracle 教學

《Administrator's Guide》記憶體管理章節核心筆記

本文整理 Oracle 11g/12c 自動記憶體管理 (AMM) 與自動共享記憶體管理 (ASMM) 的關鍵參數、啟用步驟、動態視圖分析方法與粒度概念,供 DBA 記憶體調優參考。

1. AMM 啟用與 MEMORY_TARGET 確定

-- 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

2. 參數調優參考視圖

視圖用途
V$MEMORY_TARGET_ADVICEAMM 整體建議
V$SGA_TARGET_ADVICESGA 目標值與預估 DB Time/Physical Reads 關係
V$PGA_TARGET_ADVICEPGA 目標值與預估緩存命中率關係

查詢示例:SELECT * FROM v$sga_target_advice ORDER BY sga_size; 觀察 ESTD_DB_TIME_FACTOR 接近 1 的最小 SGA_SIZE。

3. MEMORY_TARGET vs MEMORY_MAX_TARGET

  • MEMORY_TARGET:動態參數,運行時可調,上限受 MEMORY_MAX_TARGET 限制。
  • MEMORY_MAX_TARGET:靜態參數,需重啟生效,作為安全上限與未來擴容空間。
  • 若僅設 MEMORY_TARGET,MEMORY_MAX_TARGET 默認等於它;若僅設 MAX,TARGET 默認 0(AMM 未啟用)。

4. 動態元件觀察

SELECT component, current_size, min_size, max_size, user_specified_size
FROM v$memory_dynamic_components;

可見 shared pool、buffer cache、PGA Target 等元件的實際/最小/最大尺寸。

5. AMM 啟用標準步驟

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 動態調節範圍。

6. SGA 粒度與 SGA_MAX_SIZE

  • 粒度由 SGA_MAX_SIZE 決定:< 1GB → 4MB;1~8GB → 16MB;>8GB → 32MB。
  • 查詢粒度:SELECT * FROM v$sgainfo WHERE name='Granule Size';
  • 所有 SGA 元件分配均為粒度整數倍(如設 10MB 實際分配 12MB)。
  • SGA_MAX_SIZE 為靜態上限,默認 = 所有元件初始值之和或 MEMORY_MAX_TARGET(AMM 時)。

7. ASMM(僅 SGA_TARGET)自動調節元件

自動調節:Shared Pool、Buffer Cache、Large Pool、Java Pool、Streams Pool。
手動指定:Log Buffer、DB_nK_CACHE_SIZE、Keep/Recycle Pool。

8. 手動 SGA 目標估算 SQL

SELECT ( (SELECT SUM(value) FROM v$sga) -
         (SELECT current_size FROM v$sga_dynamic_free_memory) ) "SGA_TARGET"
FROM dual;

9. Buffer Cache 多塊尺寸支援

  • 標準塊尺寸:SHOW PARAMETER db_block_size(如 8KB)。
  • 非標準塊需設對應 DB_2K/4K/8K/16K/32K_CACHE_SIZE(標準塊不可設同尺寸快取)。
  • 32K 塊僅 64 位 OS 有效。

10. Buffer Pool 三類

  • DEFAULT:默認池,支援所有塊尺寸。
  • KEEP:熱數據長駐,由 DB_KEEP_CACHE_SIZE 控制(僅標準塊)。
  • RECYCLE:冷數據快速淘汰,由 DB_RECYCLE_CACHE_SIZE 控制(僅標準塊)。

11. 手動 PGA 管理參數(不推薦)

SORT_AREA_SIZE、HASH_AREA_SIZE、BITMAP_MERGE_AREA_SIZE、CREATE_BITMAP_AREA_SIZE —— 建議改用 PGA_AGGREGATE_TARGET + AMM/ASMM。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved