PostgreSQLのExplain analyzeを読みやすくする方法

   2020/07/30

PostgreSQLのExplainを使う機会があったので、メモだけ残しておきます。

explain analyzeの結果を見るのはなかなか大変です。costとactual timeの差をみることで重い処理を把握する必要がありますが結構大変でした。そこで、結果をタブ区切りに置換してExcelで確認する方法を紹介します。

Explainとは

SQLの実行計画を確認することができます。

実行計画とは、検索するときのデータの絞り込み方法のことです。先頭から全件検索をするのか、インデックスを使うのかなどを決めていきます。

Explainの実行方法は次の通りです。

explain 確認したいSQL

Explainの種類

Explainには2通りの種類があります。

  • explain
  • explain analyze

explainは実行計画のみを見ることができます。

explain analyzeは実行計画だけでなく実際の実行時間等の情報も取得することが可能です。

Explainの見方

Explainの読み方は本家のサイトにわかりやすいパワポが置いてあります。

※なくなってしまったときのために、ここからダウンロードも可能です。

Explainのコストや所要時間を簡単に見る方法

今回の記事の本題です。

costとActual Timeの差分を取ることで、どこが重い処理なのかを把握することになります。テキストでは把握しにくいのでExcelを駆使して確認します。

1.下記コマンドでタブ区切りのファイルに置換します
1. 置換したファイルの中身をExcelに転記します
1. costとActual timeの差分を計算させます

sed -i -s "s/     / /g" explain.txt
sed -i -s "s/(cost=/\t(\tcost\t/g" explain.txt
sed -i -s "s/(actual time=/\t(\tactual time\t/g" explain.txt
sed -i -s "s/ rows=/\trows\t/g" explain.txt
sed -i -s "s/ loops=/\tloops\t/g" explain.txt
sed -i -s "s/ width=/\twidth\t/g" explain.txt
sed -i -s "s/) (/\t)\t(/g" explain.txt
sed -i -s "s/\.\./\t/g" explain.txt

※expain.txtにexplain analyzeの結果が出力されている前提

下の画像がExcelに転記した内容です。赤字は数式で引き算をしています。「コスト」は「cost」の差分を、「処理時間」は「actual time」の差分です。ネストごとの積算数字になっているので、ここの数字が急上昇している部分を調査していく必要があります。

explain analyzeの結果をExcelに転記

explain analyzeの結果をExcelに転記

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。