PostgreSQL EXPLAIN ビジュアライザー
EXPLAIN ANALYZE の JSON を、時間・見積もり・バッファ付きの読みやすいプランツリーに変換
入力
EXPLAIN (FORMAT JSON) の出力を貼り付けてください。QUERY PLAN 見出しと + 記号付きの psql 出力にも対応します。
最大 5 MB。ブラウザー内で解析し、保存しません。
概要
下のコマンドを実行して JSON 結果を左側に貼り付けるか、サンプルを読み込んでください。
推奨コマンド
EXPLAIN ( ANALYZE, BUFFERS, SETTINGS, WAL, VERBOSE, FORMAT JSON ) SELECT ...;
ANALYZE は文を実際に実行します。INSERT・UPDATE・DELETE は BEGIN と ROLLBACK で囲んでください。
実行計画
EXPLAIN の結果を待っています。
表示される内容
PostgreSQL EXPLAIN Visualizer は EXPLAIN (FORMAT JSON) の出力を、折りたためるプランツリー、並べ替え可能なノード表、整形した元の JSON に変換します。概要には実行時間と計画時間、ノード数、最も遅いノード、最大の行数見積もり誤差、共有バッファ外から読み取ったブロック数を表示します。任意のノードを選ぶと PostgreSQL が報告した全項目を確認できます。
実行計画の取得方法
EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL, VERBOSE, FORMAT JSON) に続けてクエリを実行し、結果を貼り付けます。QUERY PLAN 見出し、+ の継続記号、行数のフッターを含む psql 出力は自動で整えます。ANALYZE は文を実行するため、INSERT・UPDATE・DELETE は BEGIN と ROLLBACK で囲んでください。ANALYZE なしの計画でもコストと見積もりは表示されますが、時間に基づく指摘は省略されます。
指標の算出方法
合計時間は 1 ループあたりの実時間 × ループ数です。Gather ノードの下ではプロセス数で割り、並列処理を重複して数えないようにします。自身の時間は子ノードの合計時間を差し引き、0 未満にはしないため、並列プラン・CTE・InitPlan・SubPlan では概算になります。見積もり係数は 1 ループあたりの実際の行数と見積もり行数を比較します。EXPLAIN のバッファ数は子ノードを含むため、自身の値は子の分を差し引いています。ブロックサイズは既定の 8 kB と仮定します。
指摘事項とその限界
指摘事項は計画の数値に基づく観察です。大きな行数見積もり誤差、内側の実行回数が多い Nested Loop、大半の行を捨てるシーケンシャルスキャン、ディスクにあふれたソートやハッシュ、一時ファイル、共有バッファ外からの読み取り、実行時間を占有するノードを扱います。提案は控えめで、作成すべき特定のインデックスを名指しすることはありません。実行計画だけでは、クエリの頻度、書き込み負荷、データ分布が分からないためです。
プライバシー
実行計画にはテーブル名、スキーマ名、条件式、リテラル値が含まれることがあります。計画はブラウザー内で解析され、大きな計画は Web Worker で処理されます。アップロード、ログ記録、保存は一切行いません。記憶するのは選択した表示(ツリー、表、元データ)だけです。
