自动内存管理(Automatic Memory Management)是11G中推出的新功能,10G中只有自动SGA管理。启用了AMM只需设置内存的大小,就可以自动的在SGA和PGA之间分配内存,省去了管理设置SGA和PGA的麻烦。
AMM的相关参数:
MEMORY_TARGET:SGA和PGA可以使用的内存的总的大小,可以动态的设置,最大值不超过MEMORY_MAX_TARGET。
MEMORY_MAX_TARGET:可以使用的内存的最大值,这个是静态参数,要修改必须重启数据库。
SGA_TARGET:SGA目标内存大小,启用AMM后,这个参数应该设为0.
PGA_AGGREGATE_TARGET:PGA目标内存大小,启用AMM后,应该设为0.
开启AMM:
要想开启AMM,只需要设置MEMORY_TARGET,同时设置SGA_TARGET和PGA_AGGREGATE_TARGET都为0。如果没有设置MEMORY_MAX_TARGET,在启动后MEMORY_MAX_TARGET自动设置为MEMORY_TARGET大小。这样就可以自动的在SGA和PGA之间分配内存。
可以动态的修改MEMORY_TARGET大小,只要MEMORY_TARGET<=MEMORY_MAX_TARGET即可。
例外的情况:
1.设置了MEMORY_TARGET,又设置了SGA_TARGET和PGA_AGGREGATE_TARGET
此时SGA_TARGET+ PGA_AGGREGATE_TARGET要<=MEMORY_TARGET。
SGA_TARGET和PGA_AGGREGATE_TARGET分别为SGA的PGA大小的下限。
如MEMORY_TARGET=1G,SGA_TARGET=500M,PGA_AGGREGATE_TARGET=300M,则SGA下限为500M,PGA下限为300M,以此为根据在SGA和PGA之间分配内存。
2.如果没设置MEMORY_TARGET,设置了SGA_TARGET和PGA_AGGREGATE_TARGET
这时开启了自动共享内存管理(SGA自动管理),SGA内各个组件之间自动的分配内存
3.如果啥都没有设置,也是可以启动的,按照默认的情况,把内存的40%分给ORACLE,然后把60%分给SGA,把40%分给PGA。
如果内存充足,建议开启AMM,省去了很多工作。