Oracle的ASMM(Automatic Shared Memory Management) 推出于 10g时 ,实现了Oracle SGA和PGA内部结构的自调节。进入11g之后,Oracle 11g是使用AMM(Automatic Memory Management)的。我们在安装过程中,指定Oracle使用内存的百分比,这个取值就作为MEMORY_TARGET和MEMORY_MAX_TARGET的初始取值使用。如果这两个参数设置为非零取值,那么Oracle就是采用AMM管理策略的。同时,如果我们设置这两个参数为0,则AMM自动关闭。对应的SGA_TARGET、PGA_AGGREGATE_TARGET参数取值非零之后,Oracle自动退化使用ASMM特性。
1、SGA_TARGET
1)SGA_TARGET默认值为0,即ASMM被禁用。需要手动设置SGA各中各组件的大小。
2)当SGA_TARGET为非0时,则启用ASMM,自动调整以下各组件大小:
DB buffer cache(default pool)---- 数据高速缓存区
shared pool ---- 共享池
large pool ----大池
streams pool ----流池
java pool ----Java 池
但在10g的 ASSM中, 以下参数仍需要手动指定:
log buffer
keep、
recycle、
以及非标准块缓冲区
固定SGA以及其他内部分配。
2、启用ASMM需要将STATISTICS_LEVEL设置成TYPICAL或ALL
3、启用ASMM,自动调整SGA内部组件大小后。若手动指定某一组件值,则该值为该组件的最小值。
例如: 手动设置SGA_TARGET=8G,SHARE_POOL_SIZE=1G,则ASMM在自动调整SGA内部组件大小时,保证share pool不会低于1G。
SQL> SELECT component, current_size/1024/1024 size_mb FROM v$sga_dynamic_components;
4、SGA_MAX_SIZE:
SGA_MAX_SIZE指定内存中可以分配给SGA的最大值。
SGA_TARGET是一个动态参数,其最大值为SGA_MAX_SIZE指定的值。
但注意:
在Oracle 10g中,必须将STATISTICS_LEVEL参数设置为TYPICAL (the default) 或者ALL才能启用ASMM功能,如果将其值设置为BASIC,会禁用很多新特性的;
比如:AWR/ASMM等。
可以使用EM来配置ASMM,当使用EM来配置ASMM和总SGA的值时,EM会自动设置SGA_TARGET的值,并且自动把ASMM SGA中包含的组件的值设置为0.如果使用SQL*Plus来设置SGA_TARGET,必须先把ASMM SGA中包含的组件的值设置为0。
可以通过V$SGA_TARGET_ADVICE视图来查看关于SGA_TARGET值的信息.
SQL> select * from V$SGA_TARGET_ADVICE ;
启用ASMM
1.可以通过以下SQL来查看SGA_TARGET的值
SQL>SELECT ( (SELECT SUM(value) FROM V$SGA) -(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY) ) "SGA_TARGET" FROM DUAL;
2.设置SGA_TARGET的值,可以直接修改初始化参数文件后重启数据库,或者通过下面SQL命令进行修改:
SQL>ALTER SYSTEM SET SGA_TARGET=value [SCOPE={SPFILE|MEMORY|BOTH}];
3.假如你有个本地管理的数据库,实例的SGA_MAX_SIZE=1200M,其他参数配置如下:
SQL>SHARED_POOL_SIZE = 200M DB_CACHE_SIZE = 500M LARGE_POOL_SIZE=200M
假如SGA查询结果如下:
SQL>SELECT SUM(value) FROM V$SGA;
1200M
SQL>SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY;
208M
那么,由于当前使用的内存是208M,MAX SIZE为1200M,所以可以使用如下SQL把SGA的总大小设置为992M:
SQL>ALTER SYSTEM SET SGA_TARGET = 992M;
SQL>ALTER SYSTEM SET SHARED_POOL_SIZE = 0;
SQL>ALTER SYSTEM SET LARGE_POOL_SIZE = 0;
SQL>ALTER SYSTEM SET JAVA_POOL_SIZE = 0;
SQL>ALTER SYSTEM SET DB_CACHE_SIZE = 0;
SQL>ALTER SYSTEM SET STREAMS_POOL_SIZE = 0;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30028528/viewspace-1458430/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30028528/viewspace-1458430/