DBAtlas · Atlas für Datenbankbetrieb

Tatsächlichen Ausführungsplan mit Row-Source-Statistiken anzeigen (ALLSTATS LAST)

OraclePerformance

Befehl

-- 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).

In DBAtlas öffnen →

Verwandte Einträge