10G r2环境中:

sga主要由sga_target,sga_max_size控制,sga_target设置非0时代表开户SGA自动管理,

需要注意的是,当调整sga_target<sga_max_size时,重启实例后,sga_max_size会自动调整为与sga_target相同的值(11GR2不会)。

当试图增加一个内存的大小,并且如果这个值导致所有内存区大小总和大于SGA_MAX_SIZE时,oracle会提示错误,不允许修改

当然,如果在设置参数时,指定区域为spfile时(包括修改SGA_MAX_SIZE本身),是不会受到这个限制的。这样就可能出现这样的情况,在spfile中,SGA各个内存区设置大小总和大于SGA_MAX_SIZE。这时,oracle会如下处理:当实例再次启动时,如果发现SGA各个内存总和大于SGA_MAX_SIZE,它会将SGA_MAX_SIZE的值修改为SGA各个内存区总和的值。



10G r2环境中,sga_target为动态参数,可在实例中alter system set sga_target=280M直接修改,但修改时此值不能大于sga_max_size设置的值。不然得首先修改sga_max_size的值,此参数为静态参数,alter system set sga_max_size=280m scope=spfile。




223120418.jpg


223548840.jpg



223602362.jpg


11g环境:

增加了memory_max_size与memory_target参数,当memory_target设置为0时,代表为启用内存管理,此时应该依旧可以设置sga_target与sga_max_size用于控制SGA分配,也正好说明向下兼容。

当memory_target设置非0时,说明SGA自动管理,此时sga_target与sga_max_size应不再作用于数据库。


当设置了sga_target或者设置了memoy_target时,表示SGA是由ORACLE自动管理的时候,此时再手动设置SGA中各组件的值,如果手动设置的值大于ORACLE自动设置的值,则手动设置会生效,如果手动设置的值小于ORACLE自动设置的值,则设置不会生效!

show parameter shared_pool 有时并不能准确反应SGA动态信息,

可查看v$sgainfo或v$sga_dynamic_components

或select component,current_size from v$sga_dynamic_components;

SGA相关视图:

v$sgastat

select sum(bytes)/1024/1024 mbytes from v$sgastat where pool='shared pool';

v$sgainfo(查询可调整的SGA组件)

select name,Bytes/1024/1024 Mbytes,RESIZEABLE from v$sgainfo;


查看buffer cache命中率

select 1-(PHYSICAL_READS)/(CONSISTENT_GETS+DB_BLOCK_GETS) from v$buffer_pool_statistics;