我现在正在处理一个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.
Oracle存储被安排为给定大小的块(例如8k).表和索引由磁盘上的一系列块组成.当这些块在内存中时,它们占用缓冲区.
当Oracle需要块时,它会执行缓冲区获取.首先,它检查它是否已经具有内存中所需的块.如果是,则使用内存中版本.如果内存中没有块,则它会将其从磁盘读入内存.
因此缓冲区get表示Oracle必须访问块的次数.可以从内存(缓冲区)或导致物理IO满足读取.
由于物理IO非常昂贵(与内存或CPU相比),一种调优方法是集中精力减少缓冲区获取,假设这些缓冲区将逐渐减少物理IO.
只是回答你的问题的一部分,WW没有:
"获取每个Exec"只是将获取除以语句的执行次数.您可能有一个非常有效但多次执行的语句; 这将具有大量的总缓冲区获取但是每个exec比率的低获取.