这几个命中率的方法,如果你去百度,真是千奇百怪,大多是按照自己的意会在写,就拿buffer cache hit ratio来讲,百度前几页都不太准确,例如:
select round(((1-(sum(decode(name,'physical reads', value,0))/ (sum(decode(name, 'db block gets', value,0)) +(sum(decode(name, 'consistent gets', value, 0))))))*100),2)|| '%' "Buffer Cache Hit Ratio" from v$sysstat;
复制
这个是百度上目前被接受度最高的,看上去这个没啥毛病,但oracle内部关于物理读,有很多计算内容,例如有直接路径读及lob等直接路径读的情况下,统计结果与官方的方法有很大差距。其实这些算法,在官网中有明确的计算方法,还是按照官方的计算为准比较好,避免出现争议:
(注):参考的时候,可能读取了不同版本,可以在对应的版本的《Database Performance Tuning Guide》中查找。
(1)buffer cache hit ratio:
select round(100-(phr.value)/(conc.value+dbbc.value)*100,2) prent from v$sysstat phr,v$sysstat conc,v$sysstat dbbc where phr.name='physical reads cache' and conc.name='consistent gets from cache' and dbbc.name='db block gets from cache';
复制
官方网址:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/tgdba/tuning-database-buffer-cache.html#GUID-E4018F9E-5A4B-41D0-8BCA-16191FC783BE
(2)library cache hit ratio
select round(sum(pinhits)/sum(pins)*100,2) "Library Cache Hit Ratio" from v\$librarycache;
复制
官方网址:
https://docs.oracle.com/en/database/oracle/oracle-database/21/tgdba/tuning-shared-pool-and-large-pool.html#GUID-CB036110-C43F-4265-8084-C721FEA037E0
(3)dictionary cache hit (row cache hit)
SELECT (SUM(gets - getmisses - fixed)) / SUM(gets) "row cache" FROM V$ROWCACHE;
复制
官方网址:
https://docs.oracle.com/en/database/oracle/oracle-database/21/tgdba/tuning-shared-pool-and-large-pool.html#GUID-220BC80E-FD16-4259-A7C1-E1967C510CAE
(4) pga命中率计算
select round(value,2) from V\$PGASTAT where NAME='cache hit percentage';
复制
官网地址:
https://docs.oracle.com/en/database/oracle/oracle-database/21/tgdba/tuning-program-global-area.html#GUID-892FC04E-16ED-435D-8DF3-8B74A379993B