"Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему"
Aug 292013
 

Запрос работает медленно? Ну что ж, его надо оптимизировать, и первое, на что мы будем смотреть – план его выполнения.
В этом посте расскажу как посмотреть план, если недоступны всякие GUI тулзы вроде TOAD и SQLNavigator.
Тут рассмотрим два способа:

  1. Скрипты utlxpls.sql | utlxplp.sql
  2. Пакет DBMS_XPLAN


Воспользуемся простым

explain plan for YOUR-SQL-STATEMENT

UTLXPLS.SQL

Как правило таблица для планов уже есть в схеме и нам даже не нужно прав на ее создание, так что все должно работать. Теперь план сгенерирован, но лежит он в этой таблице в не очень удобно виде. Спасибо корпорации Oracle, она позаботилась о нас и предоставила нам скрипт для ее просмотра.
utlxpls.sql, этот скрипт лежит в папке $ORACLE_HOME/rdbms/admin
Этот скрипт выводит информацию по НЕ параллельным запросам ну и для случаев распараллеливания есть utlxplp.sql, лежащий там же.
Просто запускаем их и получаем план запроса в удобном виде.
Я утащил эти скрипты к себе в рабочую папку, там их удобнее вызывать

SQL>@@work/oracle/utlxpls.sql

Еще один способ – это использование пакета DBMS_XPLAN

SQL> SELECT * FROM TABLE(dbms_xplan.display);

Естественно после того как сделали explain plan for
Вывод в обоих случаях схожий – мы видим отформатированный план и дополнительную полезную информацию по нему.

У пакета DBMS_XPLAN есть параметры вывода плана (в порядке использования в функции display):

table_name – указывает альтернативную таблицу для хранения планов
statement_id – вывести план определенного запроса (по умолчанию последний сгенерированный)
format – форматирование вывода. По умолчанию TYPICAL.
BASIC : Минимум значений, только операция и имена объектов.
TYPICAL : Используется по умолчанию. Выводит большинство параметров необходимых для анализа запроса.
ALL : TYPICAL + информация по параллельным операциям.
SERIAL : Тоже, что и TYPICAL, но без информации по параллельному выполнению запроса.

Поделиться в соц.сетях

 Posted by at 1:54 pm

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)