解释Oracle中的计划和计算缓存命中率
Explain plan and computing cache hit ratio in Oracle
假设 oracle db 40M 字节的缓存 memory.I 是数据库的唯一用户,我想了解如何执行查询以便计算查询的缓存命中率。
假设我们有这个查询:
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
每个要1340I/O?
因为我们有一个大于 table 大小的缓存,当我们进行 table 访问时,我们将磁盘内容加载到缓存中,然后当我们想要排序和 select 时,我们只需要检索缓存的内容,所以在我看来它应该是零 I/O 排序和 select.
另外,如何计算该查询的缓存命中率?
成本是操作的预期时间,以花费该时间量的等效单块读取次数表示。
因此,对于一个单块读取需要 0.5 毫秒的系统,一个 100 毫秒的操作将花费 200。
您描述的数字听起来像是累积的,因此 select 的 1340 包括分组依据的 1340,它本身包括 table 访问的 1330。因此分组成本为 10.
查询的缓存命中率将取决于执行查询之前 SGA 中有多少 table——如果有 none,则 BCHR 将是0%。如果全部是,BCHR 将是 100%。
请注意,作为系统调优工具,BCHR 已被广泛弃用,因为高 BCHR 与高效查询计划之间的相关性非常弱。事实上,您可以通过降低查询计划的效率来提高 BCHR。
假设 oracle db 40M 字节的缓存 memory.I 是数据库的唯一用户,我想了解如何执行查询以便计算查询的缓存命中率。
假设我们有这个查询:
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
每个要1340I/O?
因为我们有一个大于 table 大小的缓存,当我们进行 table 访问时,我们将磁盘内容加载到缓存中,然后当我们想要排序和 select 时,我们只需要检索缓存的内容,所以在我看来它应该是零 I/O 排序和 select.
另外,如何计算该查询的缓存命中率?
成本是操作的预期时间,以花费该时间量的等效单块读取次数表示。
因此,对于一个单块读取需要 0.5 毫秒的系统,一个 100 毫秒的操作将花费 200。
您描述的数字听起来像是累积的,因此 select 的 1340 包括分组依据的 1340,它本身包括 table 访问的 1330。因此分组成本为 10.
查询的缓存命中率将取决于执行查询之前 SGA 中有多少 table——如果有 none,则 BCHR 将是0%。如果全部是,BCHR 将是 100%。
请注意,作为系统调优工具,BCHR 已被广泛弃用,因为高 BCHR 与高效查询计划之间的相关性非常弱。事实上,您可以通过降低查询计划的效率来提高 BCHR。