ORACLE11G 自动内存管理学习
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)允许你配置自动内存管理。
http://new.51cto.com/files/uploadimg/20080806/0946380.jpg
在手动创建数据库时,只需要在创建数据库之前设置合适的MEMORY_TARGET和MEMORY_MAX_TARGET初始化参数。
在一个系统上启用自动内存管理其实很简单,不需要事先做太多的事情,可以使用下面的计算公式来计算:
MEMORY_TARGET=SGA_TARGET+GREATEST(PGA_AGGREGATE_TARGET,"maximumPGAallocated")
下面的查询语句向你展示有关的信息,以及如何计算出需要的值:
-- Individual values.COLUMN name FORMAT A30COLUMN value FORMAT A10SELECT name, valueFROM v$parameterWHEREname IN ('pga_aggregate_target', 'sga_target')UNIONSELECT 'maximum PGA allocated' AS name, TO_CHAR(value) AS valueFROM v$pgastatWHEREname = 'maximum PGA allocated';-- Calculate MEMORY_TARGETSELECT sga.value + GREATEST(pga.value, max_pga.value) AS memory_targetFROM (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=13G SCOPE=SPFILE;-- Set the dynamic parameters. Assuming Oracle has full control.ALTER SYSTEM SET MEMORY_TARGET=20G 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 A30SELECTcomponent, current_size, min_size, max_sizeFROM v$memory_dynamic_componentsWHERE current_size != 0;COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE------------------------------ ------------ ---------- ----------shared pool 197132288192937984197132288large pool 4194304 4194304 4194304java pool 41943040 41943040 41943040SGA Target 318767104285212672318767104DEFAULT buffer cache 71303168 41943040 75497472PGA Target 1048576001048576001384120326 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 26 rows selected.SQL>企业管理器中也包括了内存管理配置和顾问功能,位于“内存顾问”页面(顾问中心内存顾问)
http://new.51cto.com/files/uploadimg/20080806/0946381.jpg
点击“建议(Advice)”按钮显示“内存大小建议”屏幕,它包括了一个来自视图V$MEMORY_TARGET_ADVICE的图形显示界面。
http://new.51cto.com/files/uploadimg/20080806/0946382.jpg
页:
[1]