显示带行源统计信息的实际执行计划(ALLSTATS LAST)
Oracle性能命令
-- 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'));作用
EXPLAIN PLAN 只是估算;这里显示的是实际运行的计划,每一步包括 Starts、E-Rows(估算)、A-Rows(实际)、A-Time、Buffers 和内存使用。这是找出基数估算错误从哪一步开始的最直接方法。
适用场景
调优单条慢 SQL、证明需要统计信息/直方图,以及衡量 hint 或索引变更的效果时。
注意
无需许可。在 SET SERVEROUTPUT ON 时,sql_id=>NULL 会把 DBMS_OUTPUT 调用显示为最后一个游标;请先将其设为 OFF。不要在系统范围启用 statistics_level=ALL;它会带来明显的 CPU 开销。hint 会改变 SQL 文本,因此会产生新的 sql_id。用户需要 V$SQL_PLAN_STATISTICS_ALL 的读取权限(SELECT_CATALOG_ROLE)。