sga的自动管理

sga自动共享内存管理
sga以一定大小为单位来为各个部分分配内存空间,这个单位被称为细粒,如果sga不大于1G,那么细粒的单位就是4MB,如果大于1G,数值就可能变化了。
相应的可以在v$sga_dynamic_components中的granule_size中查到具体的数值,也可以尝试手动修改一下sga_max_size的数值,再次查看v$sga_dynamic_components
select granule_size from v$sga_dynamic_components

实际试验sga中内存的分配是否以granule细粒为单位的
手动修改下shared_pool_size的大小

alter system set shared_pool_size=30M;
此时shared_pool_size是30M,并不是4M的倍数,我们查看sga的实际分配视图
select name,bytes/1024/1024 MB from v$sgainfo
name Mb
shared pool size 32
实际分配的内存为32M,当然还有别的sga中区的实际分配值,以及字段resizeable表示是否可以改变这些sga中各个部分的大小

手工管理那就是我们需要自己手动来设置shared_pool_size ,buffer_cache_size,java_pool_size,larger_pool_size,streams_pool_size的大小,由于业务流量是边变化的
如果由dba来设置可能满足不了系统的要求,10G后就推出了sga的自动管理,我们需要设置sga_target参数希望sga自动管理规划上面的这些部分的大小,并根据实际的业务量变化。

sga_max_size参数是sga的最大大小,由于是静态初始化参数修改必须重启数据库才能生效,如果没有设置此参数sga_max_size将等于各个组件大小的总和也就是sga_target参数的大小。
但是如果sga_max_size参数太小,无法满足sga的各组件分配的大小,oracle会忽略此参数
alter system set sga_ma_size=10M scope=spfile
startup force
show parameter sga
sga_target 1G
sga_max_size 1G
此时sga_max_size参数默认等于sga_target的参数

需要自动管理sga首先需要设置sga_target为非0参数,指定sga的实际分配内存值,但是此数据不能大于sga_ma_size参数。
alter system set sga_target=2G
指定的sga_target的值大于sga_max_size

如果减小sga_target的数值,并处于压缩sga的大小的值了
alter system set sga_target=1M
无法将sga_target压缩到指定值

此时可以分析oracle是预先按照sga_target的数值来分配各个组件的实际大小,手工修改时oracle都会扩展或者收缩sga的组件大小来达到sga_target的值,但是扩展不能超过sga_max_size,收缩也不能低于sga能收缩的最小值。

还可以参考oracle的内部数据字典v$sga_target_advice中获取oracle的参考信息来设置sga_target,但是此视图个人没有过多分析,所以不好做评论。

shared_pool_size ,buffer_cache_size,java_pool_size,larger_pool_size,streams_pool_size这么参数的值了,这些参数经过实际查资料以及试验是这些组件的分配的预先最小值,就是说实际中他们的数值是大于等于上述这些参数的值。

设置sga自动管理还需要把statistics_level设置为typical(默认值)或者all
如果想让oracle内部自动管理sga组件,可以直接把shared_pool_size ,buffer_cache_size,java_pool_size,larger_pool_size,streams_pool_size全部设置为0,此时没有分配的最小值,oracle会自己根据业务来调节各组件的大小

自动共享内存管理,共享池往往不会被缩小。
alter system set shared_pool_size=500M --设置最小shared_pool_size的分配值
alter system set sga_target=0 --手工管理sga,此时shared_pool_size为上述分配值
alter system set sga_target=500M --开启自动sga管理,sga_target的值不是很大,此时按理说shared_pool_size应该减小来满足别的组大小
show parameter sga
sga_target 808M
此时shared pool并没有缩小,而是sga_target会自动增加到一个需要的值。

某些UNIX平台不支持动态共享内存,SGA占用的物理内存等于SGA_MAX_SIZE指定的值,因此在这样的平台上设定SGA_TARGET(可以动态调整)小于SGA_MAX_SIZE没有实际意义,也就没必要设定SGA_MAX_SIZE了。相反,在另外一些平台如Solaris和Windows上,SGA占用的物理内存等于SGA_TARGET的设定值。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25362835/viewspace-1053599/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25362835/viewspace-1053599/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值