|
(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和内存使用顾问是冲突的。这点要格外注意!
|
|