解释Oracle中的计划和计算缓存命中率

时间:2016-12-08 11:01:58

标签: sql database oracle sql-execution-plan

让我们说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。

我无法理解某些内容,为什么SORTSELECT STATEMENT每次花费1340 I / O?

由于我们在执行表访问时有一个大于表大小的缓存,我们在缓存中加载磁盘内容,然后当我们想要排序和选择时,我们只需要检索缓存的内容,所以在我的介意它应该是零I / O以进行排序和选择。

另外,我如何计算该查询的缓存命中率?

1 个答案:

答案 0 :(得分:1)

成本是操作的预期时间,以可能花费该时间的单个块读取的等效数量表示。

因此,对于一个单个块读取需要0.5ms的系统进行100ms操作将产生200的成本。

您描述的数字听起来像是累积的,因此选择的1340包括1340用于组,其本身包括1330用于表访问。因此该组成本为10。

查询的缓存命中率取决于在执行查询之前SGA中有多少表 - 如果没有,则BCHR将为0%。如果全部是,那么BCHR将是100%。

请注意,作为系统调整工具,BCHR被广泛弃用,因为高BCHR和高效查询计划之间的相关性非常弱。事实上,您可以通过提高查询计划的效率来提高您的BCHR。