Memory_max_target 与 Memory_target 使用介绍(11g新特性AMM)
来源:互联网 发布:手机海报拼图软件 编辑:程序博客网 时间:2024/06/06 00:31
Oracle 11g R1下的自动内存管理(AMM)
Oracle在简化内存管理方面过去几年做了巨大的努力,从Oracle 9i通过PGA_AGGREGATE_TARGET参数实现PGA自动管理开始,Oracle 10g通过SGA_TARGET参数实现了SGA的自动管理,Oracle 11g更是惊人地实现了数据库所有内存块的全自动化管理,它使得动态管理SGA和PGA成为现实。
写本文时,自动内存管理(AMM)已经在主流平台上得到支持,包括Linux,Windows,Solaris,HP-UX,AIX。
AMM参数
自动内存管理是用两个初始化参数进行配置的:
MEMORY_TARGET:动态控制SGA和PGA时,Oracle总共可以使用的共享内存大小,这个参数是动态的,因此提供给Oracle的内存总量是可以动态增大,也可以动态减小的。它不能超过MEMORY_MAX_TARGET参数设置的大小。默认值是0。
MEMORY_MAX_TARGET:这个参数定义了MEMORY_TARGET最大可以达到而不用重启实例的值,如果没有设置MEMORY_MAX_TARGET值,默认等于MEMORY_TARGET的值。
使用动态内存管理时,SGA_TARGET和PGA_AGGREGATE_TARGET代表它们各自内存区域的最小设置,要让Oracle完全控制内存管理,这两个参数应该设置为0。
AMM配置
在数据库创建过程中,数据库配置助手(DBCA)允许你配置自动内存管理
在手动创建数据库时,只需要在创建数据库之前设置合适的MEMORY_TARGET和MEMORY_MAX_TARGET初始化参数。
在一个系统上启用自动内存管理其实很简单,不需要事先做太多的事情,可以使用下面的计算公式来计算:
MEMORY_TARGET=SGA_TARGET+GREATEST(PGA_AGGREGATE_TARGET,"maximumPGAallocated")
下面的查询语句向你展示有关的信息,以及如何计算出需要的值:
-- Individual values.
COLUMN name FORMAT A30
COLUMN value FORMAT A10
SELECT name, value
FROM v$parameter
WHERE name IN ('pga_aggregate_target', 'sga_target')
UNION
SELECT 'maximum PGA allocated' AS name, TO_CHAR(value) AS value
FROM v$pgastat
WHERE name = 'maximum PGA allocated';
-- Calculate MEMORY_TARGET
SELECT sga.value + GREATEST(pga.value, max_pga.value) AS memory_target
FROM (SELECT TO_NUMBER(value) AS value FROM v$parameter WHERE name = 'sga_target') sga,
(SELECT TO_NUMBER(value) AS value FROM v$parameter WHERE name = 'pga_aggregate_target') pga,
(SELECT value FROM v$pgastat WHERE name = 'maximum PGA allocated') max_pga;
假设我们需要的设置是5G,那么我们可以执行下面的语句:
CONN / AS SYSDBA
-- Set the static parameter. Leave some room for possible future growth without restart.
ALTER SYSTEM SET MEMORY_MAX_TARGET=6G SCOPE=SPFILE;
-- Set the dynamic parameters. Assuming Oracle has full control.
ALTER SYSTEM SET MEMORY_TARGET=5G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0 SCOPE=SPFILE;
ALTER SYSTEM SET SGA_TARGET=0 SCOPE=SPFILE;
-- Restart instance.
SHUTDOWN IMMEDIATE;
STARTUP;
当数据库重启后,MEMORY_TARGET参数就可以在不重启实例的情况下随意改变大小了。如:
ALTER SYSTEM SET MEMORY_TARGET=4G SCOPE=SPFILE;
AMM调整
除现有的用于内存管理的V$视图外,Oracle 11g还新增加了下面4个视图用于自动内存管理:
- V$MEMORY_CURRENT_RESIZE_OPS
- V$MEMORY_DYNAMIC_COMPONENTS
- V$MEMORY_RESIZE_OPS
- V$MEMORY_TARGET_ADVICE
为每个动态组件分配的内存大小使用视图V$MEMORY_DYNAMIC_COMPONENTS显示:
COLUMN component FORMAT A30
SELECT component, current_size, min_size, max_size
FROM v$memory_dynamic_components
WHERE current_size != 0;
COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE
------------------------------ ------------ ---------- ----------
shared pool 197132288 192937984 197132288
large pool 4194304 4194304 4194304
java pool 41943040 41943040 41943040
SGA Target 318767104 285212672 318767104
DEFAULT buffer cache 71303168 41943040 75497472
PGA Target 104857600 104857600 138412032
6 rows selected.
SQL>
V$MEMORY_CURRENT_RESIZE_OPS和V$MEMORY_RESIZE_OPS分别显示了组件当前改变大小操作的信息和上一次改变大小操作的信息。
V$MEMORY_TARGET_ADVICE提供了帮助调整MEMORY_TARGET参数的信息,它显示了一段MEMORY_TARGET设置可用的范围,根据当前的设置,估算完成当前负载所需要的DB Time值。
SELECT * FROM v$memory_target_advice ORDER BY memory_size;
MEMORY_SIZE MEMORY_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR VERSION
----------- ------------------ ------------ ------------------- ----------
303 .75 3068 1.0038 2
404 1 3056 1 2
505 1.25 3056 1 2
606 1.5 3056 1 2
707 1.75 3056 1 2
808 2 3056 1 2
6 rows selected.
SQL>
企业管理器中也包括了内存管理配置和顾问功能,位于“内存顾问”页面(顾问中心?内存顾问)
点击“建议(Advice)”按钮显示“内存大小建议”屏幕,它包括了一个来自视图V$MEMORY_TARGET_ADVICE的图形显示界面。
11g MEMORY_TARGET 参数对SGA 和PGA的影响
11g 中新增MEMORY_MAX_TARGET 参数,此参数一出现就如在10g 中第一次出现SGA_MAX_SIZE 参数一样给人以耳目一新的感觉。memory_max_target 是设定Oracle能占OS多大的内存空间,一个是Oracle SGA 区最大能占多大内存空间。无疑在11g Oracle 又向自动管理内存更进一步。
10g 的sga_max_size 是动态分配 Shared Pool Size,database buffer cache,large pool,java pool,redo log buffer 大小的,只是根据Oracle 运行状况来重新分配SGA 各内存块的大小。PGA在10g 中需要单独设定.
11g MEMORY_MAX_TARGET 参数包含两部分内存,一个 System global area (SGA),另一个 system global area(PGA)。很显然在11g 中可已经将PGA 和SGA 一起动态管理了。
下面来看看在11g 中Memory_target 设置和不设置对SGA/PGA 的影响:
A:如果Memory_target 设置为非0 值
(下面有四种情况来对SGA 和PGA 的大小进行分配)
1:sga_target 和 pga_aggregate_target 已经设置大小如果Oracle 中
已经设置了参数sga_target 和pga_aggregate_target,则这两个参数将各自被分配为 最小值最为它们的目标值。
Memory_Target =SGA_TARGET+PGA_AGGREGATE_TARGET ,大小和 memory_max_size 一致。
2:sga_target 设置大小, pga_aggregate_target 没有设置大小
那么pga_aggregate_target初始化值=memory_target-sga_target
3:sga_target 没有设置大小, pga_aggregate_target 设置大小
那么sga_target 初始化值=memory_target-pga_aggregate_target
4:sga_target 和 pga_aggregate_target 都没有设置大小 Oracle 11g
中对这种sga_target 和pga_aggregate_target 都没有设定大小的情况下,Oracle将对这两个值没有最小值和默认值。
Oracle 将根据数据库运行状况进行分配大小。
但在数据库启动是会有一个固定比例来分配:
sga_target =memory_target *60%
pga_aggregate_target=memory_target *40%
B:如果Memory_target 没有设置或=0 (在11g 中默认为0)
11g 中默认为0 则初始状态下取消了Memory_target 的作用,完全和10g 在内存管理上一致,完全向下兼容。
(也有三种情况来对SGA 和PGA 的大小进行分配)
1:SGA_TARGET设置值,则自动调节SGA 中的shared pool,buffer cache,redo log buffer,java pool,larger pool
等内存空间的大小。PGA 则依赖pga_aggregate_target 的大小。sga 和pga 不能自动增长和自动缩小。
2:SGA_target 和PGA_AGGREGATE_TARGET 都没有设置
SGA 中的各组件大小都要明确设定,不能自动调整各组建大小。PGA不能自动增长和收缩。
3: MEMORY_MAX_TARGET 设置而MEMORY_TARGET =0 这种情况先和10g 一样,不做说明
在11g 中可以使用下面看各组件的值
SQL> show parameter target
NAME TYPE VALUE
------------------------ ----------- ---------------------
archive_lag_target integer 0
db_flashback_retention_target integer 1440
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 1024M
memory_target big integer 1024M
pga_aggregate_target big integer 0
sga_target big integer 0
如果需要监视Memory_target 的状况则可以使用下面三个动态试图:
V$MEMORY_DYNAMIC_COMPONENTS
V$MEMORY_RESIZE_OPS
v$memory_target_advice
使用下面Command 来调节大小:
SQL>ALTER SYSTEM SET MEMORY_MAX_TARGET = 1024M SCOPE = SPFILE;
SQL>ALTER SYSTEM SET MEMORY_TARGET = 1024M SCOPE = SPFILE;
SQL>ALTER SYSTEM SET SGA_TARGET =0 SCOPE = SPFILE;
SQL>ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0 SCOPE = SPFILE;
忘了在哪一个网站上下载了这样的一副关系图,很直观的表达了10g和11g的自动内存管理的参数之间的关系:
- Memory_max_target 与 Memory_target 使用介绍(11g新特性AMM)
- Oracle 11g AMM: MEMORY_TARGET, MEMORY_MAX_TARGET and /dev/shm
- 11g 新参数之 memory_max_target|memory_target
- Oracle 11g新参数USE_LARGE_PAGES与AMM使用
- Oracle 11g新特性:Memory_target与自动内存管理
- MEMORY_TARGET/MEMORY_MAX_TARGET
- linux操作系统下,oracle db 11g中增大memory_max_target和memory_target应该注意的
- Oracle 11g AMM与ASMM切换
- Oracle 11g AMM与ASMM切换
- Oracle 11g AMM与ASMM切换
- Oracle 11g AMM与ASMM切换
- Oracle 11g AMM与ASMM切换
- Oracle 11g AMM与ASMM切换
- Oracle 11g AMM与ASMM切换
- oracle 11G 之 AMM
- oracle 11g 新参数 MEMORY_TARGET
- 11g新特性
- 11g 新特性
- HTML 标签记录
- kvm perf howto
- BITMAPFILEHEADER、BITMAPINFOHEADER结构体及BMP详解
- 关于LC电路中电磁振荡过程的一个问题,向各位求教
- 原型模式
- Memory_max_target 与 Memory_target 使用介绍(11g新特性AMM)
- 第十章 信号及信号处理
- VB.Net程序设计:动态添加右键菜单和子菜单
- Ubuntu10.10修改环境变量
- 使用 Boost 的 IPC 和 MPI 库进行并发编程
- Moravec角点检测算子和Harris角点检测算子
- Flume OG 与 Flume NG 的对比
- php如何实现定时任务 php定时任务方法 最佳解决方案 php自动任务处理
- #pragma pack( [ n] )