优化共享池:
用以下语句检测命中率:
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为对应段的缓存命中率。