В Oracle что на самом деле означает «Buffer Gets»? - PullRequest
24 голосов
/ 17 ноября 2008

В данный момент я имею дело с администратором базы данных Oracle, который прислал мне профилирование. Одним из терминов в его отчете является «Buffer Gets», есть идеи, что это на самом деле означает? Я предполагаю, что байты извлекаются из буфера, но я понятия не имею. Вот пример вывода:

  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'

Было бы также полезно узнать, что означает «Gets per Exec», так как я думаю, что они связаны? Я программист, но не администратор.

Ответы [ 3 ]

42 голосов
/ 17 ноября 2008

Хранилище Oracle организовано в блоки определенного размера (например, 8 КБ). Таблицы и индексы состоят из серии блоков на диске. Когда эти блоки находятся в памяти, они занимают буфер.

Когда Oracle требует блок, он делает буфер get . Сначала он проверяет, есть ли у него блок, в котором он нуждается в памяти. Если это так, используется версия в памяти. Если у него нет блока в памяти, он будет считывать его с диска в память.

Таким образом, буфер get представляет количество обращений Oracle к блоку. Чтения могли быть выполнены либо из памяти (из буферов), либо могли привести к физическому вводу-выводу.

Поскольку физический ввод-вывод является слишком дорогим (по сравнению с памятью или процессором), один из подходов к настройке состоит в том, чтобы сконцентрироваться на уменьшении количества получаемых буферов, которые, как предполагается, будут использоваться для уменьшения физического ввода-вывода.

11 голосов
/ 17 ноября 2008

Просто чтобы ответить на одну часть вашего вопроса, которую не сделал WW:

"Gets per Exec" - это просто число Get, деленное на количество выполнений оператора. Вы можете иметь утверждение, которое очень эффективно, но выполняется много раз; это может привести к большому количеству общего числа получений в буфере, но к низкому количеству получений на исполнение.

0 голосов
/ 20 февраля 2014

Я просто хочу немного подумать.

Во-первых, Дейв Коста прав, но Buffer получает именно то, что действительно важно.

С этими данными мы не можем сказать, слишком много они или нет, потому что вы не говорите, сколько записей извлекает ваш запрос.

Если вы извлечете 4000 записей, возможно, 4380 - это нормально. Если вы извлекаете только 1 запись, это, вероятно, слишком много

Итак, сколько записей?

И еще, вы планируете посмотреть sql? У вас есть индекс на fieldOne?

Правильный индекс - это первый «секрет» для настройки запроса.

Только мои 2 цента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...