我正在与Oracle DBA打交道,他已经给我发了一些他已经完成的分析。他的报告中的一个术语是“缓冲获取”,任何想法这实际意味着什么?我的猜测是从缓冲区中检索的字节,但我真的不知道。以下是一些示例输出:
Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
137,948,100 31,495 4,380.0 98.4 6980.57 6873.46 4212400674
Module: JDBC Thin Client
SELECT fieldOne, fieldTwo, fieldThree, fieldFour, fieldFive FROM TableExample
WHERE fieldOne = 'example'
知道'获得每个执行'意味着什么也是很方便的,因为我猜它们是相关的?我是程序员,但不是DBA。
答案 0 :(得分:42)
Oracle存储被安排到给定大小的块(例如8k)。表和索引由磁盘上的一系列块组成。当这些块在内存中时,它们会占用缓冲区。
当Oracle需要阻止时,它会执行缓冲区获取。首先,它检查它是否已经具有内存中所需的块。如果是,则使用内存中版本。如果内存中没有该块,则它会将其从磁盘读入内存。
因此缓冲区get表示Oracle必须访问块的次数。可以从内存(缓冲区)或者导致物理IO满足读取。
由于物理IO非常昂贵(与内存或CPU相比),一种调优方法是集中精力减少缓冲区获取,假设这些缓冲区将逐渐减少物理IO。
答案 1 :(得分:11)
回答你的问题的一部分,WW没有:
“获取每个Exec”只是获取除以语句的执行次数。您可能有一个非常有效但多次执行的语句;这将有大量的总缓冲区获取,但每个执行器的比率很低。
答案 2 :(得分:-1)
我只想稍加考虑一下。
首先Dave Costa是对的,缓冲区获得exec是真正重要的。
根据这些数据,我们无法说出它们是否太多而导致您没有说明您的查询提取了多少条记录
如果您提取4000条记录,则可能有4,380条记录正常 如果你只提取1条记录,那么它们可能太多了
那么,有多少记录?
还有更多,你有一个sql计划看? 你有关于fieldOne的索引吗?
正确的索引是第一个"秘密"用于调整查询。
只需2美分