SGA相关

读了biti_rainy的oracle内存分配与调整的文章,记录于此。

redo  buffers

        指日志缓冲区,log_buffer。对于v$parameter、v$sgastat、v$sga查询的值可能不一样。v$parameter里面的值是指用户在初始化参数文件里面设置的值,v$sgastat是oracle实际分配的日志缓冲区大小(因为缓冲区的分配值实际上是离散的,也不是以block为最小单位分配的),v$sga里面查询的值,是在oracle分配了日志缓冲区后,为了保护日志缓冲区,设置了一些保护页,通常我们会发现保护页大小约是11k)。

SGA的分配

        通常习惯通过直观的公式来表达这样的问题:

     OS使用的内存+SGA+并发进程数*(sort_area_size+hash_area_size+2M)<0.7*总内存


Lock_sga=true的问题

  由于几乎所有的操作系统都支持虚拟内存,所以即使我们使用的内存小于物理内存,也不能避免操作系统将SGA换到虚拟内存(SWAP)。所以我们可以尝试使得SGA锁定在物理内存中不被换到虚拟内存中,这样减少页面的换入和患处,从而提高性能。

  内存参数的调整

 

SQL> select value from v$sysstat where name ='physical reads';

     VALUE
----------
 129873772

SQL> select value from v$sysstat where name ='physical reads direct';

     VALUE
----------
  37780712

SQL> select value from v$sysstat where name ='physical reads direct (lob)';

     VALUE
----------
     58287

SQL> select value from v$sysstat where name ='consistent gets';

     VALUE
----------
2.2775E+10

SQL> select value from v$sysstat where name = 'db block gets';

     VALUE
----------
1315000979 

这里的命中率的计算应该是

令x=physical read direct + physical reads direct (lob)

命中率=100-(physical reads -x ) / (consistent gets +db block gets -x)*100

通常如果发现命中率低于90%,则应该调整应用或者可以考虑增大数据缓冲区。


共享池的命中率

SQL> select sum(pinhits-reloads)/sum(pins)*100 "hit ratio" from v$librarycache;

 hit ratio
----------
89.1250853
假如共享池的命中率低于95%,就要考虑调整应用或者增加内存。


关于排序不分

SQL> select name,value from v$sysstat where name like '%sort%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
sorts (memory)                                                     27546223
sorts (disk)                                                             19
sorts (rows)                                                     6931919007

假如我们发现sort(disk)/(sorts(memory)+sorts(disk))的比例过高,则通常意味着sort_area_size 不分内存较小,可以考虑调整相应的参数。

关于log_buffer

SQL> select name,value from v$sysstat where name in ('redo entries','redo buffer allocation retries');

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo entries                                                      324512004
redo buffer allocation retries                                       168793

假如redo buffer allocation retries/redo entries 的比例超过1%我们就可以考虑增大log_buffer。

通常来说,内存调整的焦点都集中在这几个方面,更多更详细的内容,建议从statspack入手来一步一步调整。最后关于内存的调整,一定要结合操作系统来衡量,任何理论都要实践来检验,如果发现操作系统的page in/out比较严重,就需要考虑减小SGA了。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值