Tatsächlichen Ausführungsplan mit Row-Source-Statistiken anzeigen (ALLSTATS LAST)
OraclePerformanceBefehl
-- 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'));Was es tut
EXPLAIN PLAN ist eine Schätzung; dies zeigt den tatsächlich ausgeführten Plan mit Starts, E-Rows (Schätzung), A-Rows (tatsächlich), A-Time, Buffers und Speichernutzung je Schritt. So findest du am direktesten den Schritt, an dem die Fehlschätzung der Kardinalität beginnt.
Wann einsetzen
Beim Tuning einer einzelnen langsamen SQL, um den Bedarf an Statistiken/Histogrammen nachzuweisen und um die Wirkung eines Hints oder einer Indexänderung zu messen.
Vorsicht
Keine Lizenz erforderlich. Mit SET SERVEROUTPUT ON zeigt sql_id=>NULL den DBMS_OUTPUT-Aufruf als letzten Cursor; schalte es vorher OFF. Aktiviere statistics_level=ALL nicht systemweit; das verursacht spürbaren CPU-Overhead. Der Hint ändert den SQL-Text, daher erhält sie eine neue sql_id. Der Benutzer braucht Lesezugriff auf V$SQL_PLAN_STATISTICS_ALL (SELECT_CATALOG_ROLE).
Verwandte Einträge
- AWR-Snapshot erstellen und AWR-Report zwischen zwei Snapshots erzeugen
- AWR-Diff-Report (Compare Period) zwischen zwei Zeiträumen
- Top Wait Events und Top-SQL der letzten Minuten aus ASH
- ADDM-Analyse ausführen und Report abrufen
- SQL-Monitor-Report abrufen (laufende oder abgeschlossene lange SQL)
- 10046-Trace für eine Session aktivieren/deaktivieren und mit TKPROF zusammenfassen