Вопрос. Существуют ли хорошие способы объективного измерения производительности запросов в Oracle 10g?
- Трассировка Oracle — лучший способ измерения производительности. Выполните запрос и позвольте Oracle инструментировать выполнение. В среде SQLPlus использовать AUTOTRACE очень просто.
http://asktom.oracle.com/tkyte/article1/autotrace.html (статья перемещена)
http://tkyte.blogspot.com/2007/04/when-explanation-doesn-sound-quite.html
http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:5671636641855
И включить трассировку Oracle в других средах не так уж и сложно.
Вопрос. Есть один конкретный запрос, над которым я работал несколько дней. У меня есть версия, которая работает быстрее (по крайней мере, судя по моим первоначальным тестам), но стоимость EXPLAIN примерно такая же.
- Фактическое выполнение оператора — это то, что необходимо измерить. EXPLAIN PLAN неплохо предсказывает план оптимизатора, но на самом деле не измеряет производительность.
Вопрос> 1 . Насколько вероятно, что в стоимости EXPLAIN чего-то не хватает?
- Маловероятно, но я видел случаи, когда EXPLAIN PLAN предлагает план, отличный от оптимизатора.
Вопрос> 2 . Существуют ли особые ситуации, когда стоимость EXPLAIN непропорционально отличается от фактической производительности запроса?
- Краткий ответ заключается в том, что я не наблюдал ни одного. Но опять же, на самом деле нет прямой корреляции между стоимостью EXPLAIN PLAN и фактической наблюдаемой производительностью. EXPLAIN PLAN может дать очень большое значение стоимости, но фактическое выполнение запроса займет меньше секунды. EXPLAIN PLAN не измеряет фактическую производительность запроса, для этого вам нужна трассировка Oracle.
Вопрос> 3 . Я использовал подсказку first_rows в этом запросе. Оказывает ли это влияние?
- Любая подсказка (например,
/*+ FIRST_ROWS */
) может повлиять на выбор плана оптимизатором.
«Стоимость», возвращаемая EXPLAIN PLAN, является относительной. Это показатель производительности, но не точный ее показатель. Вы не можете преобразовать значение стоимости в количество дисковых операций, количество секунд ЦП или количество событий ожидания.
Обычно мы обнаруживаем, что оператор со стоимостью EXPLAIN PLAN, показанной как 1, будет выполняться «очень быстро», а оператор со стоимостью EXPLAIN PLAN порядка пяти или шести цифр займет больше времени для выполнения. Но не всегда.
Оптимизатор сравнивает множество возможных планов выполнения (полное сканирование таблицы, использование индекса, соединение с вложенным циклом и т. д.). Оптимизатор присваивает номер каждому плану, а затем выбирает план с наименьшим номером.
Я видел случаи, когда план оптимизатора, показанный EXPLAIN PLAN, НЕ соответствует фактическому плану, используемому при выполнении оператора. Я видел это десять лет назад в Oracle8, особенно когда оператор включал переменные связывания, а не литералы.
Чтобы получить фактическую стоимость выполнения инструкции, включите трассировку для своей инструкции. Проще всего это сделать с помощью SQLPlus AUTOTRACE.
[http://asktom.oracle.com/tkyte/article1/autotrace.html][4]
Вне среды SQLPlus вы можете включить трассировку Oracle:
alter session set timed_statistics = true;
alter session set tracefile_identifier = here_is_my_session;
alter session set events '10046 trace name context forever, level 12'
--alter session set events '10053 trace name context forever, level 1'
select /*-- your_statement_here --*/ ...
alter session set events '10046 trace name context off'
--alter session set events '10053 trace name context off'
Это помещает файл трассировки в каталог user_dump_dest на сервере. Созданный файл трассировки будет содержать план оператора И все события ожидания. (Назначенный идентификатор файла трассировки включен в имя файла и упрощает поиск файла в каталоге udump)
select value from v$parameter where name like 'user_dump_dest'
Если у вас нет доступа к файлу трассировки, вам потребуется помощь администратора базы данных, чтобы получить доступ. (Администратор базы данных может создать простой сценарий оболочки, который разработчики могут запускать с файлом .trc для запуска tkprof и изменять разрешения для файла трассировки и вывода tkprof. Вы также можете использовать более новый trcanlzr. обе.
person
spencer7593
schedule
15.05.2009