Analyze PostgreSQL Slowlog with pgBadger

ItoWataru

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

こんにちは、エンジニアの伊藤です。

今回は PostgreSQL のクエリ解析の話をします、と一口に言っても範囲がまだ広いので、まずは対象読者の絞り込みをさせていただきます。

本記事の対象読者

  • AWS RDS DB の利用者である
  • 解析対象は、AWS Aurora for PostgreSQL ではない
  • 解析対象は、AWS RDS for PostgreSQL だが、やんごとなき理由で Version 10 ではない

これでわりと絞り込まれたと思います。すべて YES ならば続きをご覧ください。

ちなみに、AWS Aurora for PostgreSQL or AWS RDS for PostgreSQL Version 10 をご利用の方は、Performance Insights をご覧いただくことをオススメします。いい機能です。

事前準備

Parameter Group の設定変更をお忘れなく。

log_statement = ALL にするとクエリにかかった時間が見えなくなりますのでご注意ください(Managed Service で syslog は見れないのはしょうがないですね)。

PostgreSQL のクエリを解析するには

選挙ポスターを見る人達のイラスト

我々はどう解析すればよいのでしょう。
幼き頃より慣れ親しんだ Maatkit も今は亡く、後を継いだ Percona Toolkit は PostgreSQL のみならず Memcached のサポートも切っており、遠き山の端の落日を思わせる寂寥感。ここにも小さな秋がありました。mk-query-digest を rpm から取り出し、perl 5.16 を入れ、クエリの正規化部分を直せば動かすことは可能ですが時間の無駄なのでやめましょう。平成最後の夏も過ぎました。後退するものはあれど我々は前進していくのです。

pg_query_analyser というツールもあるのですが、Ubuntu でないと動かしづらいことに加え、そもそも log_line_prefix を変えられない AWS RDS for PostgreSQL ではちゃんと解析ができません。残念です。動かす手順は一応置いておきますが、後述する pgBadger の方が高機能なので、頑張って使うメリットは特にありません。

pgBadger

AWS 公式情報でも紹介されています。OSX でも Linux でも動かせるのは良いですね!!! make こそが力であります。

OSX で動かす場合のコマンドを紹介します。

Install pgBadger

https://pgbadger.darold.net/

Analyze postgresql.log.YYYY-mm-dd-HH

pgBadger view

出来た HTML を開くとこんな画面です。なかなかかっこよい。

画面上部の項目から統計情報が色々と見れるので小一時間は潰せますね。

肝心のクエリ解析ですが、Top という項目から見ることができます。

この画面内にいかにもといった期待を感じさせるメニューが並んでいます。

Slowest individual queries

単体で最も遅いクエリをランキングで表示

Time consuming queries

最もPostgreSQLの時間を消費したクエリをランキング表示

地味にありがたいことに、クエリ部分をダブルクリックすると見やすく indent してくれます。こういう細かい部分に顕れるのがおもてなしの心って奴なんでしょうねぇ。。

他には、Most frequent queries (実行回数の多い順)、Normalized slowest queries (正規化した時に遅い順) もあるので、これで当たりをつけて粛々と Analyze できる訳です。

以上、ご紹介した以外にも便利機能のある pgBadger、使う機会に恵まれることはそれほどありませんがオススメできます。

みなさまの快適な Profiling 生活に幸多からんことを。

インフラ周りに関することなら
お気軽にご相談ください。

お客様のご要望に合わせて柔軟な対応をさせていただきます。
お見積り依頼やご相談・ご質問はお問い合わせフォームからお願いいたします。

ご相談・お問い合わせ