Запрос работает медленно? Ну что ж, его надо оптимизировать, и первое, на что мы будем смотреть – план его выполнения.
В этом посте расскажу как посмотреть план, если недоступны всякие GUI тулзы вроде TOAD и SQLNavigator.
Тут рассмотрим два способа:
- Скрипты utlxpls.sql | utlxplp.sql
- Пакет 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, но без информации по параллельному выполнению запроса.
Поделиться в соц.сетях