【IT168技术文档】
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")
下面的查询语句向你展示有关的信息,以及如何计算出需要的值:
1 --Individual values.2 3 COLUMNname FORMAT A304 5 COLUMNvalue FORMAT A106 7 SELECTname, value8 9 FROMv$parameter10 11 WHEREnameIN('pga_aggregate_target','sga_target')12 13 UNION14 15 SELECT'maximum PGA allocated'ASname, TO_CHAR(value)ASvalue16 17 FROMv$pgastat18 19 WHEREname='maximum PGA allocated';20 21 --Calculate MEMORY_TARGET22 23 SELECTsga.value+GREATEST(pga.value, max_pga.value)ASmemory_target24 25 FROM(SELECTTO_NUMBER(value)ASvalueFROMv$parameterWHEREname='sga_target') sga,26 27 (SELECTTO_NUMBER(value)ASvalueFROMv$parameterWHEREname='pga_aggregate_target') pga,28 29 (SELECTvalueFROMv$pgastatWHEREname='maximum PGA allocated') max_pga;30 31 假设我们需要的设置是5G,那么我们可以执行下面的语句: CONN/ASSYSDBA32 33 --Set the static parameter. Leave some room for possible future growth without restart.34 35 ALTERSYSTEMSETMEMORY_MAX_TARGET=6G SCOPE=SPFILE;36 37 --Set the dynamic parameters. Assuming Oracle has full control.38 39 ALTERSYSTEMSETMEMORY_TARGET=5G SCOPE=SPFILE;40 41 ALTERSYSTEMSETPGA_AGGREGATE_TARGET=0SCOPE=SPFILE;42 43 ALTERSYSTEMSETSGA_TARGET=0SCOPE=SPFILE;44 45 --Restart instance.46 47 SHUTDOWNIMMEDIATE;48 49 STARTUP;50
当数据库重启后,MEMORY_TARGET参数就可以在不重启实例的情况下随意改变大小了。如: ALTER SYSTEM SET MEMORY_TARGET=4G SCOPE=SPFILE;
本文介绍了Oracle数据库从9i到11g在内存管理上的自动化改进,特别是11g中实现了所有内存块的全自动化管理。自动内存管理(AMM)通过MEMORY_TARGET和MEMORY_MAX_TARGET参数实现,允许动态调整SGA和PGA。文中提供了计算和配置自动内存管理的步骤,包括查询当前设置、计算MEMORY_TARGET值,并展示了启用和调整AMM的SQL语句。在启用AMM后,数据库重启后可以不重启实例地调整MEMORY_TARGET大小。
1万+

被折叠的 条评论
为什么被折叠?



