DBAtlas · Атлас эксплуатации баз данных

Показать фактический план выполнения со статистикой row source (ALLSTATS LAST)

OracleПроизводительность

Команда

-- 1) Collect row source statistics (for this query only):
SET SERVEROUTPUT OFF
SELECT /*+ gather_plan_statistics */ customer_id, SUM(amount)
FROM   customer_app.sales
WHERE  created_at >= DATE '2026-06-01'
GROUP  BY customer_id;
-- or for the whole session: ALTER SESSION SET statistics_level = ALL;

-- 2) Plan of the last cursor run in the same session (E-Rows vs A-Rows):
SELECT *
FROM   TABLE(DBMS_XPLAN.DISPLAY_CURSOR(
         sql_id          => NULL,
         cursor_child_no => NULL,
         format          => 'ALLSTATS LAST +PEEKED_BINDS +OUTLINE'));

-- 3) A cursor from another session / from earlier:
SELECT *
FROM   TABLE(DBMS_XPLAN.DISPLAY_CURSOR('<sql_id>', NULL, 'ALLSTATS LAST +PEEKED_BINDS'));

Что делает

EXPLAIN PLAN — это оценка; здесь показывается фактически выполненный план со Starts, E-Rows (оценка), A-Rows (факт), A-Time, Buffers и использованием памяти по каждому шагу. Это самый прямой способ найти шаг, с которого начинается ошибка оценки кардинальности.

Когда использовать

При настройке одного медленного SQL, чтобы доказать необходимость статистики/гистограмм и измерить эффект от хинта или изменения индекса.

Внимание

Лицензия не требуется. При SET SERVEROUTPUT ON sql_id=>NULL покажет вызов DBMS_OUTPUT как последний курсор; сначала выключите его (OFF). Не включайте statistics_level=ALL на уровне системы; это даёт заметные накладные расходы CPU. Хинт меняет текст SQL, поэтому он получает новый sql_id. Пользователю нужен доступ на чтение к V$SQL_PLAN_STATISTICS_ALL (SELECT_CATALOG_ROLE).

Открыть в DBAtlas →

Связанные материалы