DBAtlas · Atlas de operações de banco de dados

Mostrar o plano de execução real com estatísticas de row source (ALLSTATS LAST)

OracleDesempenho

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

O que faz

EXPLAIN PLAN é uma estimativa; isto mostra o plano que realmente rodou, com Starts, E-Rows (estimado), A-Rows (real), A-Time, Buffers e uso de memória por passo. É a forma mais direta de achar o passo em que começa o erro de estimativa de cardinalidade.

Quando usar

Ao fazer tuning de um único SQL lento, para provar a necessidade de estatísticas/histogramas e para medir o efeito de um hint ou de uma mudança de índice.

Atenção

Não exige licença. Com SET SERVEROUTPUT ON, sql_id=>NULL mostra a chamada DBMS_OUTPUT como último cursor; defina OFF antes. Não habilite statistics_level=ALL para todo o sistema; adiciona overhead perceptível de CPU. O hint muda o texto do SQL, que ganha um novo sql_id. O usuário precisa de acesso de leitura a V$SQL_PLAN_STATISTICS_ALL (SELECT_CATALOG_ROLE).

Abrir no DBAtlas →

Relacionados