Медленный запрос Oracle и USER_IO_WAIT_TIME - PullRequest
0 голосов
/ 26 июля 2010

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

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

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

Ответы [ 2 ]

2 голосов
/ 26 июля 2010

Выделение большего объема памяти для Oracle приведет к увеличению скорости работы базы данных , поскольку расширение кэша БД уменьшает количество операций ввода-вывода.Мы можем почувствовать потенциальное улучшение с помощью советника кеша БД .

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

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

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

1 голос
/ 23 августа 2010

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

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

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

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

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

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