Показать фактический план выполнения со статистикой 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).
Связанные материалы
- Сделать снимок AWR и сформировать отчёт AWR между двумя снимками
- Отчёт AWR diff (compare period) между двумя периодами
- Топ wait events и топ SQL из ASH за последние минуты
- Выполнить анализ ADDM и получить отчёт
- Получить отчёт SQL Monitor (выполняющийся или завершённый долгий SQL)
- Включить/выключить трассировку 10046 для сессии и обобщить её через TKPROF