oracle自动共享内存管理(ASMM)(二)

2014-11-24 12:53:28 · 作者: · 浏览: 1
的大小。
SQL> SELECT component, current_size/1024/1024 size_mb
2 FROM v$sga_dynamic_components where comp;
COMPONENT SIZE_MB
------------------------------------ ------------
shared pool 80
当前MMAN自动调整出来的shared pool大小为80MB。
SQL> alter system set shared_pool_size=70M;
SQL> SELECT component, current_size/1024/1024 size_mb
2 FROM v$sga_dynamic_components where comp;
COMPONENT SIZE_MB
------------------------------------ ------------
shared pool 80
我们将shared_pool_size设定为70MB,小于自动调整出来的值。可以看到,shared pool没有
缩小,仍然是80MB。我们再将其从80MB扩大到100MB。
SQL> alter system set shared_pool_size=100M;
SQL> SELECT component, current_size/1024/1024 size_mb
2 FROM v$sga_dynamic_components where comp;
COMPONENT SIZE_MB
------------------------------------ ------------
shared pool 100
显然,只要我们设定的值比自动调整出来的值大,就会立即生效。
同时,如果当前我们启用了ASMM,同时并没有为这5个可以自动调整的内存池参数指定具体的值。当数据
库在ASMM状态下运行一段时间以后,我们再禁用ASMM,会发生什么?我们来看下面的试验。
SQL> select name,value from v$parameter
2 where name in('shared_pool_size','db_cache_size','
java_pool_size','large_pool_size',' streams_pool_size');
NAME VALUE
-------------------- --------------
shared_pool_size 96468992
large_pool_size 0
java_pool_size 0
streams_pool_size 0
db_cache_size 0
可以看到,除了shared pool为DBA指定以外(因为shared_pool_size大于0),其他的内存池
都由ASMM指定。
SQL> select component, current_size FROM v$sga_dynamic_
components 2 where component like '%pool' or comp;
COMPONENT SIZE_MB
---------------------------------- -----------
shared pool 138412032
large pool 4194304
java pool 4194304
streams pool 0
DEF***T buffer cache 373293056
我们看到,ASMM根据当前的负载情况,为这5个内存池指定了大小。
SQL> alter system set sga_target=0;
SQL> select name,value from v$parameter
2 where name in('shared_pool_size','db_cache_size','
java_pool_size','large_pool_size',' streams_pool_size');
NAME VALUE
-------------------- --------------
shared_pool_size 138412032
large_pool_size 4194304
java_pool_size 4194304
streams_pool_size 0
db_cache_size 373293056
当我们将sga_target设置为0,从而禁用ASMM时,会发现,Oracle会自动将当前内存池的大小
赋给对应的初始化参数(shared_pool_size、db_cache_size等)。同时我们也可以注意到,
shared_pool_size的值也不再是DBA当时指定的96468992,而是被ASMM自动调整出来
的138412032所覆盖。