技术开发 频道

Oracle数据库优化之系统全局区(SGA)

  优化共享池:

  用以下语句检测命中率:

  select sum(pins)"pinned",sum(reloads)"reloaded" from v$librarycache

  pinned reloaded

  ---------- ---------

  2474 17

  命中率=pinned/ reloaded

  若命中率低可增大INIT.ORA中SHARED_POOL_SIZE的值。

  调整快速缓存

   利用缓存的命中率评价快速缓存的活动

  select name,value from v$sysstat where name in (‘db block gets’,’consistent_gets’,’physical reads‘);

  db block gets, consistent_gets其和为数据请求总数,physical reads为数据请求导致访问磁盘数据文件的总数。

  增加db_block_buffers应该遵循如下规则:

   缓存命中率低于0.9;

   前面增加的db_block_buffers有效

   提高缓冲区命中率

  如果缓冲命中率低,如小于60%或70%,那么需要增加缓冲区中的缓存数。方法是增大db_block_buffers的值。

  表v$recent_bucket的每一行反映在缓存中增加一个缓冲区的相应性能值,其中rownum列比可能增加到缓存的缓冲区数小1;count列通过增加缓冲区数rownum+1到缓存,增加的缓冲区命中。

  查询v$recent_bucket视图:select sum(count) ach from v$recent_bucket where rownum<20 ;

  使用如下公式计算命中率(ACH为增加的命中次数):Hit Ratio=1-(physical reads-ACH/(db block gets+consistent gets) );

  组合v$recent_bucket视图中的行,使用如下语句:select 250*TRUNC(ROWNUM/250)+1||’to’||250*(TRUNC(ROWNUM/250)+1) “Interval”,sum(count)”Buffer Cache Hits” from v$recent_bucket group by trunc(ROWNUM/250) ;

   在命中率高时,删除不必要的缓存

  减少参数DB_BLOCK_BUFFERS的值可以使缓存变小,(最小值为4)。

  视图v$CURRENT_BUCKET包含对一个小缓存的性能统计,其列描述如下:

  ROWNUM—缓存中可能的缓冲区数

  COUNT—对缓冲区数ROWNUM的缓存命中数

  初始参数DB_BLOCK_LRU_STATISTICS控制视图V$CURRENT_BUCKET的统计,默认值为FALSE,意味着不收集统计数据。将其设置为TRUE,视图V$CURRENT_BUCKET将收集统计。

  查询V$CURRENT_BUCKET视图,如果当前缓存为100,如果想知道在90时,缓存非命中的增加数,使用如下语句:

  SELECT SUM(COUNT) ACM FROM V$CURRENT_BUCKET WHERE ROWNUM>=90 ;

  计算命中率(ACM为增加的非命中次数):Hit Ratio=1-(physical reads + ACM/(db block gets+consistent gets));

  也可以将100个缓冲区分为4个25个缓冲区段:

  select 25*TRUNC(ROWNUM/25)+1||’to’||25*(TRUNC(ROWNUM/25+1)”Interval”,sum(count)”Buffer Cache Hits” from v$CURRENT_BUCKET where rownum>0 group by TRUNC(ROWNUM/25));

  其中INTERVAL为缓冲区段,BUFFER CACHE HITS为对应段的缓存命中率。

0
相关文章