行ソース統計付きで実際の実行計画を表示(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のチューニング、統計/ヒストグラムの必要性の証明、ヒントやインデックス変更の効果測定に。
注意
ライセンス不要。SET SERVEROUTPUT ONの状態では、sql_id=>NULLで最後のカーソルとしてDBMS_OUTPUTの呼出しが表示されるため、先にOFFにする。statistics_level=ALLをシステム全体で有効にしない。顕著なCPUオーバーヘッドが発生する。ヒントはSQLテキストを変えるため、新しいsql_idになる。ユーザーにはV$SQL_PLAN_STATISTICS_ALLの読み取りアクセス(SELECT_CATALOG_ROLE)が必要。