PostgreSQLのExplain analyzeを読みやすくする方法
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」の差分です。ネストごとの積算数字になっているので、ここの数字が急上昇している部分を調査していく必要があります。
この記事へのコメントはこちら