Mostrar o plano de execução real com estatísticas de row source (ALLSTATS LAST)
OracleDesempenhoComando
-- 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).
Relacionados
- Tirar um snapshot do AWR e gerar um relatório AWR entre dois snapshots
- Relatório AWR diff (compare period) entre dois períodos
- Principais wait events e principais SQL do ASH nos últimos minutos
- Executar uma análise ADDM e obter seu relatório
- Obter um relatório do SQL Monitor (SQL longo em execução ou concluído)
- Habilitar/desabilitar o trace 10046 de uma sessão e resumir com TKPROF