DBAtlas · Atlas de operaciones de bases de datos

Mostrar el plan de ejecución real con estadísticas de row source (ALLSTATS LAST)

OracleRendimiento

Comando

-- 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'));

Qué hace

EXPLAIN PLAN es una estimación; esto muestra el plan que realmente se ejecutó, con Starts, E-Rows (estimación), A-Rows (real), A-Time, Buffers y el uso de memoria por paso. Es la forma más directa de encontrar el paso donde empieza el error de estimación de cardinalidad.

Cuándo usarlo

Al ajustar un único SQL lento, para demostrar la necesidad de estadísticas/histogramas y para medir el efecto de un hint o de un cambio de índice.

Precaución

No requiere licencia. Con SET SERVEROUTPUT ON, sql_id=>NULL muestra la llamada a DBMS_OUTPUT como último cursor; póngalo en OFF primero. No habilite statistics_level=ALL a nivel de sistema; añade una sobrecarga de CPU notable. El hint cambia el texto del SQL, por lo que obtiene un sql_id nuevo. El usuario necesita acceso de lectura a V$SQL_PLAN_STATISTICS_ALL (SELECT_CATALOG_ROLE).

Abrir en DBAtlas →

Relacionado