让我们说oracle db 40M字节的缓存内存。我是数据库的唯一用户,我想了解如何执行查询以便计算查询的缓存命中率。
我们说我们有这个问题:
SELECT column1, count(*)
FROM table1
GROUP BY column1
ORDER BY column1 desc
假设table1
小于40M,现在解释计划说:
TABLE ACESS(FULL)
费用为1330(I / O?),然后SORT(GROUP BY)
费用为1340,SELECT STATEMENT
费用为1340。
我无法理解某些内容,为什么SORT
和SELECT STATEMENT
每次花费1340 I / O?
由于我们在执行表访问时有一个大于表大小的缓存,我们在缓存中加载磁盘内容,然后当我们想要排序和选择时,我们只需要检索缓存的内容,所以在我的介意它应该是零I / O以进行排序和选择。
另外,我如何计算该查询的缓存命中率?
答案 0 :(得分:1)
成本是操作的预期时间,以可能花费该时间的单个块读取的等效数量表示。
因此,对于一个单个块读取需要0.5ms的系统进行100ms操作将产生200的成本。
您描述的数字听起来像是累积的,因此选择的1340包括1340用于组,其本身包括1330用于表访问。因此该组成本为10。
查询的缓存命中率取决于在执行查询之前SGA中有多少表 - 如果没有,则BCHR将为0%。如果全部是,那么BCHR将是100%。
请注意,作为系统调整工具,BCHR被广泛弃用,因为高BCHR和高效查询计划之间的相关性非常弱。事实上,您可以通过提高查询计划的效率来提高您的BCHR。