Подтвердить что ты не робот

В Oracle, что на самом деле означает "Buffer Gets"?

В настоящий момент я имею дело с Oracle DBA, который отправил мне некоторое профилирование, которое он сделал. Одним из условий в его отчете является "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'

Было бы также полезно знать, что означает "Получает за Exec", как я полагаю, они связаны между собой? Я программист, но не DBA.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

Я хочу лишь немного подумать.

Вначале Дейв Коста прав, Буффер получает для exec, что действительно важно.

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

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

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

И еще, есть ли у вас план sql? У вас есть указатель на полеOne?

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

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