2010-07-26 4 views
0

У нас есть медленный запрос с низким значением optimizer_cost, но очень высоким значением user_io_wait_time. Означает ли это, что есть узкое место ввода-вывода?Медленный запрос Oracle и USER_IO_WAIT_TIME

Должны ли мы выделять больше памяти Oracle? Получить более быстрые диски?

Примечание: статистика были собраны с помощью запроса V $ SQL

ответ

2

Выделяя больше памяти Oracle будет , как правило, сделать базу данных быстрее, потому что расширение кэш БД уменьшает I/O. Мы можем почувствовать потенциальное улучшение с помощью the DB cache advisor.

Однако нет никакой гарантии, что добавление памяти улучшит ваш конкретный запрос. Это подход blunderbuss, и работает ли он в этом случае, действительно зависит от характера запроса.

Существует множество причин, по которым стоимость плана объяснения не соответствует фактическому истекшему времени. Можно было бы сказать, что ваши статистические данные устарели, и план подходит к гораздо меньшей таблице. Другое дело в том, что вы страдаете от перекоса, поэтому у вас есть план, который подходит для определенных значений запроса, но не для других. Или вы, возможно, страдаете от несчастливого выбора привязки переменной peeking. Опять же, это может быть связано с аппаратным обеспечением: плохой диск, изворотливые межсоединения, плохая конфигурация SAN.

Как заметил Чехов, плохо выполняемые запросы плохо работают по-своему. Итак, если вы хотите получить более подробную помощь, вам нужно будет предоставить более подробную информацию о вашем конкретном сценарии.

+1

для полноты, я бы добавил еще одну причину к списку с прогнозом неэффективности работы: ошибка CBO - часто случается, но никогда не может быть исключена – dpbradley

1

Прежде чем покупать что-либо (прежде чем делать какие-либо капитальные затраты), сделайте еще несколько копаний. Explain plan - как прогноз погоды. Он может рухнуть перед лицом реальности.

Есть несколько вещей, которые вы можете сделать, в то время как оскорбительный запрос запущен.

(1) войдите в серверную машину и следите за использованием циклов процессора и диска io. В Linux команда sar -u 1 120 даст вам две минуты бездействия CPU. Если у вас нет холостого процессора, тогда ваш запрос чрезмерно использует вычислительные циклы. Аналогично, sar -d 1 120 расскажет, насыщен ли ваш диск IO. Microsoft perfmon и диспетчер задач Windows скажут вам то же самое, если это место, где размещается ваш экземпляр Oracle.

(2) использовать консоль Oracle Enterprise Manager. Войдите в базу данных, посмотрите список сеансов и посмотрите на различные интенсивные сессии. Менеджер предприятия может показать вам, какие запросы запущены, и какие именно планы выполнения они используют. Они также могут рассказать вам, делают ли они что-то сверхтяжелое, как полномасштабное сканирование огромной таблицы.

Подробный обзор вывода explain plan. Это может показать вам полное сканирование таблицы или другое неприятное поражение производительности, которое предлагает решение, подобное добавлению индекса.

Смежные вопросы