DBAtlas · 数据库运维图谱

显示带行源统计信息的实际执行计划(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)。

在 DBAtlas 中打开 →

相关内容