Mostrar el plan de ejecución real con estadísticas de row source (ALLSTATS LAST)
OracleRendimientoComando
-- 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).
Relacionado
- Tomar un snapshot de AWR y generar un informe AWR entre dos snapshots
- Informe AWR diff (compare period) entre dos periodos
- Top wait events y top SQL desde ASH para los últimos minutos
- Ejecutar un análisis ADDM y obtener su informe
- Obtener un informe de SQL Monitor (SQL largo en ejecución o finalizado)
- Habilitar/deshabilitar el trace 10046 para una sesión y resumirlo con TKPROF