Кто-нибудь может объяснить немного о плане объяснения и как получить план объяснения для запроса. Кроме того, если есть какой-либо сценарий sql, который можно использовать в качестве утилиты для этого, это было бы здорово.
Кто-нибудь может объяснить немного о плане объяснения и как получить план объяснения для запроса. Кроме того, если есть какой-либо сценарий sql, который можно использовать в качестве утилиты для этого, это было бы здорово.
Ответы:
Вы можете использовать пакет DBMS_XPLAN :
SQL> explain plan for select * from dual;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 |
| 1 | TABLE ACCESS FULL | DUAL | 1 | 2 | 2 |
--------------------------------------------------------------------
Note: cpu costing is off
Оператор EXPLAIN PLAN отображает планы выполнения, выбранные оптимизатором для операторов SELECT, UPDATE, INSERT и DELETE. План выполнения оператора - это последовательность операций, которую база данных выполняет для выполнения оператора.
EXPLAIN PLAN FOR ...
Замените ... вашим оператором SQL. После запуска выполните следующую команду для просмотра плана:
SELECT * FROM table(dbms_xplan.display);
Для получения дополнительной информации см. Разделы « Обзор» или « Использование» в Руководстве по настройке производительности Oracle 11g.
Это очень распространенный вопрос, поэтому я решил превратить этот ответ в статью .
Предполагаемый план выполнения создается оптимизатором без выполнения запроса SQL. Вы можете сгенерировать примерный план выполнения из любого клиента SQL, используя EXPLAIN PLAN FOR, или вы можете использовать Oracle SQL Developer для этой задачи.
При использовании Oracle, если вы добавите EXPLAIN PLAN FOR
команду к заданному SQL-запросу, база данных сохранит примерный план выполнения в связанном PLAN_TABLE
:
EXPLAIN PLAN FOR
SELECT p.id
FROM post p
WHERE EXISTS (
SELECT 1
FROM post_comment pc
WHERE
pc.post_id = p.id AND
pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY
Чтобы просмотреть примерный план выполнения, вам нужно использовать DBMS_XPLAN.DISPLAY
, как показано в следующем примере:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'))
Параметр форматирования ALL + OUTLINE позволяет получить более подробную информацию о предполагаемом плане выполнения, чем при использовании параметра форматирования по умолчанию.
Если вы установили SQL Developer, вы можете легко получить примерный план выполнения для любого SQL-запроса без необходимости добавлять команду EXPLAIN PLAN FOR:
Фактический план выполнения SQL создается оптимизатором при выполнении запроса SQL. Таким образом, в отличие от предполагаемого плана выполнения, вам необходимо выполнить запрос SQL, чтобы получить его фактический план выполнения.
Фактический план не должен значительно отличаться от предполагаемого, если статистика таблиц была должным образом собрана базовой реляционной базой данных.
Чтобы указать Oracle хранить фактический план выполнения для данного запроса SQL, вы можете использовать GATHER_PLAN_STATISTICS
подсказку запроса:
SELECT /*+ GATHER_PLAN_STATISTICS */
p.id
FROM post p
WHERE EXISTS (
SELECT 1
FROM post_comment pc
WHERE
pc.post_id = p.id AND
pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY
Чтобы визуализировать фактический план выполнения, вы можете использовать DBMS_XPLAN.DISPLAY_CURSOR
:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST ALL +OUTLINE'))
Если вы хотите получить планы выполнения для всех запросов, сгенерированных в данном сеансе, вы можете установить STATISTICS_LEVEL
конфигурацию сеанса на ВСЕ:
ALTER SESSION SET STATISTICS_LEVEL='ALL'
Это будет иметь тот же эффект, что и GATHER_PLAN_STATISTICS
указание подсказки для каждого запроса на выполнение. Таким образом, так же, как с GATHER_PLAN_STATISTICS
подсказкой запроса, вы можете использовать DBMS_XPLAN.DISPLAY_CURSOR
для просмотра фактического плана выполнения.
Вы должны сбросить
STATISTICS_LEVEL
настройку на режим по умолчанию, как только закончите сбор интересующих вас планов выполнения. Это очень важно, особенно если вы используете пул соединений и соединения с базой данных используются повторно.ALTER SESSION SET STATISTICS_LEVEL='TYPICAL'