Настройка высокой производительности SQL 611
Исследование планов выполнения
Оптимизатор вырабатывает для оператора SQL план выполнения. Исследовать
план выполнения можно с помощью команды SQI*Plus EXPLAIN PLAN.
Эта команда заполняет таблицу plan_table планами выполнения операторов
SQL; таблицу plan_table часто называют таблицей планов. Чтобы исследовать
полученный план, следует задать запрос к таблице планов. Первое,
что нужно сделать, - проверить, существует ли таблица планов в базе
данных.
Проверка существования таблицы планов в базе данных
Чтобы проверить, существует ли таблица планов в базе данных, подключитесь
как пользователь s to r e и выполните следующую команду DESCRIBE:
□ SQL> DESCRIBE p l a n _ t a b l e
Name N u l l ? Type
STATEMENT ID VARCHAR2(30)
PLAN ID NUMBER
TIMESTAMP . - DATE
REMARKS VARCHAR2(4000)
OPERATION VARCHAR2(30)
OPTIONS VARCHAR2(255)
OBJECT NODE VARCHAR2(128)
OBJECT OWNER VARCHAR2(30)
OBJECT NAME VARCHAR2(30)
OBJECT AL IAS VARCHAR2(65)
OBJECT INSTANCE NUMBER(38)
OBJECT TYPE VARCHAR2(30)
OPTIMIZER VARCHAR2(255)
SEARCH COLUMNS NUMBER
ID NUMBER(38)
PARENT ID NUMBER(38)
DEPTH NUMBER(38)
POSITION NUMBER(38)
COST NUMBER(38)
CARDINALITY NUMBER(38)
BYTES NUMBER(38)
OTHER TAG VARCHAR2(255)
PARTITION START VARCHAR2(255)
PARTITION STOP VARCHAR2(255)
PARTITION ID NUMBER(38)
OTHER LONG
OTHER XML CLOB
DISTRIBUTION VARCHAR2(30)
CPU COST NUMBER(38)
10 COST NUMBER(38)
TEMP SPACE NUMBER(38)
ACCESS PREDICATES VARCHAR2(4000)
FILTER PREDICATES VARCHAR2(4000)
PROJECTION VARCHAR2(4000)
TIME NUMBER(38)
QBLOCK NAME VARCHAR2(30)
612 Глава 16
Если вы получили описание таблицы, аналогичное показанным результатам,
у вас уже есть таблица планов. Если вы получили ошибку, значит,
вам нужно создать таблицу планов.
Создание таблицы планов
Если у вас нет таблицы планов, её необходимо создать. Для создания таблицы
планов необходимо выполнить сценарий SQI?Plus utlxplan.sql (на
моём компьютере под управлением Windows этот сценарий расположен в
папке E:\oracle_llg\product\l 1.1.0\db_l\RDBMS\ADMIN). В следующем
примере демонстрируется команда для выполнения сценария utlxplan.
sqclass="underline"
□ SQL> @ E:\oracle_11g\product\11.1.0\db_1\RDBMS\ADMIN\utlxplan.sql
Примечание
компьютера.
Вы должны заменить указанный в команде путь к каталогу путем для вашего
Наиболее важные столбцы таблицы планов показаны в таблице 16.1.
Таблица 16.1. Столбцы таблицы планов
Столбец Описание
statement_id Имя, назначенное плану выполнения.
operation Выполняемая операция базы данных, которая может быть одной из следующих:
■ сканирование таблицы
■ сканирование индекса
■ обращение к столбцам таблицы с помощью индекса
■ соединение двух таблиц
■ сортировка множества строк
Например, операция доступа к таблице записывается как TABLE ACCESS.
options Названия опций, используемых в операции. Например, опция, описывающая
полное сканирование, записывается как FULL.
object_name Имя объекта базы данных, упоминаемого в операции.
object J:ype Атрибут объекта. Например, уникальный индекс имеет атрибут UNIQUE.
id Номер, приписываемый операции в плане выполнения.
parent_id Номер родителя текущего шага в плане выполнения. Значение parentjd
связано со значением id из родительского шага.
position Порядок обработки шагов, имеющих одинаковое значение parentjd.
cost Оценка единиц работы, необходимых для выполнения операции.
Стоимостной оптимизатор использует в качестве единиц работы дисковый
ввод/вывод и использование процессора и памяти. Таким образом, стоимость
операции состоит из оценки объема дискового ввода/вывода и количества
процессорного времени и памяти, использованных при выполнении
операции.
Настройка высокой производительности SQL 613
Создание центральной таблицы планов
Ваш АБД может создать одну центральную таблицу планов. В результате
индивидуальным пользователям не понадобится создавать собственные
таблицы планов. Для создания подобной таблицы АБД должен
выполнить следующие шаги.
1. Создать таблицу планов в выбранной им схеме, выполнив для этого
сценарий utlxplan.sql.
2. Создать общедоступный синоним для таблицы планов.
3. Предоставить доступ к таблице планов для роли public.
Например:
@ E : \ o r a c l e _ 1 1 g \ p r o d u c t \ 1 1 . 1 . 0 \ d b _ 1 \R D BM S \A D M IN \ u t lx p la n . s q l
CREATE PUBLIC SYNONYM p l a n _ t a b l e FOR p l a n _ t a b le ;
GRANT SELECT, INSERT, UPDATE, DELETE ON plan.table TO PUBLIC;
Генерация плана выполнения
После создания таблицы планов можно использовать команду EXPLAIN PLAN
для генерации плана выполнения оператора SQL. Синтаксис команды
EXPLAIN PLAN имеет следующий вид:
□ EXPLAIN PLAN SET STATEMENT_ID = идент_опер FOR onepaTop_SQL;