代码之家  ›  专栏  ›  技术社区  ›  rustyshelf

在Oracle中,“缓冲区获取”实际上指的是什么?

  •  24
  • rustyshelf  · 技术社区  · 17 年前

      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。

    3 回复  |  直到 17 年前
        1
  •  44
  •   WW.    17 年前

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

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

    因此,buffer get表示Oracle必须访问一个块的次数。读操作可以从内存(缓冲区)中得到满足,也可以导致物理IO。

        2
  •  12
  •   Dave Costa    17 年前

    仅回答您的问题中WW没有回答的一部分:

    “Gets per Exec”只是Gets除以语句的执行次数。您可能有一个非常高效但执行多次的语句;这将有大量的总缓冲区获取,但每个执行的获取比率较低。

        3
  •  -1
  •   LordMax    12 年前

    我只想考虑一下。

    首先,Dave Costa是对的,exec获得的缓冲区才是真正重要的。

    对于这些数据,我们不能说它们是否太多,因为您不能说您的查询提取了多少条记录

    如果您提取4000条记录,那么4380条就可以了

    那么,有多少张唱片?

    你有fieldOne的索引吗?

    只要我的2美分