当前位置:  开发笔记 > 数据库 > 正文

在Oracle中,'Buffer Gets'实际上指的是什么?

如何解决《在Oracle中,'BufferGets'实际上指的是什么?》经验,为你挑选了2个好方法。

我现在正在处理一个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.



1> WW...:

Oracle存储被安排为给定大小的块(例如8k).表和索引由磁盘上的一系列块组成.当这些块在内存中时,它们占用缓冲区.

当Oracle需要块时,它会执行缓冲区获取.首先,它检查它是否已经具有内存中所需的块.如果是,则使用内存中版本.如果内存中没有块,则它会将其从磁盘读入内存.

因此缓冲区get表示Oracle必须访问块的次数.可以从内存(缓冲区)或导致物理IO满足读取.

由于物理IO非常昂贵(与内存或CPU相比),一种调优方法是集中精力减少缓冲区获取,假设这些缓冲区将逐渐减少物理IO.


是的 - 再补充一点,许多查询成本模型几乎完全专注于磁盘I/O,缓冲区获取是建模(不完美,但尽可能接近).所以,它意味着一个简单的成本函数 - "这个查询有多贵,忽略了CPU(无论如何这几乎可以忽略不计)?"

2> Dave Costa..:

只是回答你的问题的一部分,WW没有:

"获取每个Exec"只是将获取除以语句的执行次数.您可能有一个非常有效但多次执行的语句; 这将具有大量的总缓冲区获取但是每个exec比率的低获取.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有