Oracle 自动管理 ASMM

(Automatic Shared Memory Management)就是SGA自动管理。ORACLE 9I就已经实现了PGA自动管理。ORACLE 10G开始,SGA也可以自动管理了。

SGA组件与参数:

SGA组件 参数
Shared Pool(包括Library Cache和Row Cache shared_pool_size
Data Buffer Cache(数据缓冲区)

db_cache_size

db_2/4/8/16/32k_cache_size 

db_keep_cache_size 

db_recycle_cache_size

Redo Log Buffer(日志缓冲区) log_buffer
Stream Pool(支持Stream复制) streams_pool_size
Large Pool(Shared Server、IO Server process、RMAN会用到) large_pool_size
Java Pool java_pool_size

上述参数中,java_pool_size、large_pool_size、shared_pool_size 、db_cache_size现在在ASMM中都自动管理。

 

但有几个参数还必须手动管理,包括:

db_keep_cache_size、db_recycle_cache_size、streams_pool_size、db_nK_cache_size、log_buffer。

 

ASMM是由MMAN进程完成的,它每分钟会检查AWR的性能信息,从而决定SGA的最佳分布。当并行处理开启时,MMAN会检查内存分配,以保证有足够的Large Pool空间支持并行操作。如果需要增加Large Pool大小,MMAN就会通过减少其他SGA区域的大小划分给Large Pool。

ASMM启动后,MMAN在每次关闭实例之前会把SGA组件大小记录在spfile中。

 

要启用ASMM,需要设置两个参数。

把STATISTICS_LEVEL设置成TYPICAL或者ALL。

把SGA_TARGET设成非0值。

要注意,MEMORY_MAX_TARGET>MEMORY_TARGET>SGA_MAX_SIZE>SGA_TARGET。不设置正确可能实例无法启动。

ALTER SYSTEM SET…. SCOPE=SPFILE;

例如可以设置成:

MEMORY_MAX_TARGET= 2147483648,--2GB

MEMORY_TARGET=2147483648,

SGA_MAX_SIZE= 1610612736, --1.5GB

SGA_TARGET=1610612736。

其中SGA_TARGET可以SCOPE=BOTH。

再关闭实例的时候,SPFILE中会产生几个特殊参数:

.__db_cache_size=xxxx;

.__java_pool_size=xxxx;

.__large_pool_size=xxxx;

.__shared_pool_size=xxxx;

 

通过V$SGA_DYNAMIC_COMPONENTS可以查看ASMM的调整效果

SQL>SELECT COMPONENT, CURRENT_SIZE, MAX_SIZE, USER_SPECIFIED_SIZE FROM V$SGA_DYNAMIC_COMPONENTS;

USER_SPECIFIED_SIZE如果是0,那就是已经自动管理。

SQL>ALTER SYSTEM SET SGA_TARGET=0;后

USER_SPECIFIED_SIZE变为非0,ASMM关闭。

 

ASMM和内存使用顾问是冲突的。这点要格外注意!


你可能感兴趣的:(oracle,内存管理,ASMM)