Oracle 19C AWR报告中Flash Cache Hit %为负值的原因咨询
Oracle 19C AWR中Flash Cache Hit %为负值的根因
AWR里的Flash Cache Hit %是靠两个系统统计值的区间增量计算得出,官方计算口径如下:
Flash Cache Hit % = (快照区间内闪存缓存命中次数 / (区间闪存缓存命中次数 + 区间闪存缓存未命中次数)) * 100
正常情况下这个指标取值只会在0到100%区间:0代表未启用智能闪存缓存,不存在闪存命中的IO;100%代表所有走闪存缓存路径的IO全部命中,和你在其他客户端环境观测到的现象一致。出现负值全是以下三类已知问题导致,并不代表闪存缓存真的出现了负命中的异常状态:
- 版本自带统计bug:19.3到19.10版本区间的部分RU补丁存在计数逻辑错误,只要实例未配置
db_flash_cache_file、db_flash_cache_size参数(即未启用Database Smart Flash Cache特性),physical read flash cache hits统计项在处理异步IO、直接路径IO的场景下会被错误扣减,最终计数值变为负数,套入公式计算出的命中率自然为负。这个bug完全不影响实际IO性能,仅存在统计值计数错误。 - 快照统计基准中断:AWR的指标计算完全依赖前后两个快照点的累计统计值做差,如果快照覆盖的时间段内发生过实例重启、PDB迁移、手动重置系统统计值的操作,两个快照的计数基准就会不连续。若快照结束点记录的命中计数小于起始点计数,算出的区间增量为负,最终命中率就会显示为负值。这类场景下该快照区间内所有基于累计统计值计算的效率指标都不具备参考价值。
- Exadata环境计数偏差:如果实例部署在Exadata平台,19C早期版本开启Smart Scan特性时,会将存储节点闪存返回的IO重复统计为未命中,抵消正常命中计数后就会算出负的命中率,该问题同样属于统计误差,不代表闪存实际命中率异常。
快速校验方法
- 先检查实例
db_flash_cache_size参数值,若参数值为0,说明根本没有启用数据库智能闪存缓存特性,这个指标本身无参考意义,负值完全是统计bug导致,和观测到的性能下降问题无关,不需要针对闪存缓存方向排查。- 若参数确实配置了闪存缓存,翻查对应时间点的告警日志,确认快照区间内是否存在实例重启、PDB切换、手动重置统计值的操作,如果存在这类操作,换用相邻无状态中断的快照区间重新分析性能即可。
- 若为Exadata环境且排除前两种场景,将数据库RU升级到19.11及以上版本即可修复该统计计数错误。
内容的提问来源于stack exchange,提问作者Ora_en
相关产品推荐
相关产品推荐

