- 本記事の対象読者
- 事前準備
- PostgreSQL のクエリを解析するには
- pgBadger
- Install pgBadger
- Analyze postgresql.log.YYYY-mm-dd-HH
- pgBadger view
- Slowest individual queries
- Time consuming queries
こんにちは、エンジニアの伊藤です。
今回は 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 の方が高機能なので、頑張って使うメリットは特にありません。
cd ~/path/to/workdir/
git clone git@github.com:WoLpH/pg_query_analyser.git
cat <<__EOF__> Dockerfile
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y \
build-essential \
qt4-dev-tools \
qt4-qmake \
libqt4-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
COPY ./your_postgresql.log /tmp/
COPY ./pg_query_analyser /tmp/pg_query_analyser
WORKDIR /tmp/pg_query_analyser/
RUN qmake -makefile
RUN make
RUN make install
__EOF__
# Setup docker
docker build -t pg_query_analyser .
docker run -it pg_query_analyser bash
# Docker login
cd /tmp/pg_query_analyser
cat /tmp/your_postgresql.log | pg_query_analyser -i -
# 別 terminal で実行
docker cp \
$(docker ps | awk '{if($2=="pg_query_analyser") print $1}'):/tmp/report.html .\
open ./report.html
pgBadger
AWS 公式情報でも紹介されています。OSX でも Linux でも動かせるのは良いですね!!! make こそが力であります。
OSX で動かす場合のコマンドを紹介します。
Install pgBadger
cd ~/path/to
wget https://github.com/darold/pgbadger/archive/v9.2.tar.gz
tar xf v9.2.tar.gz
cd pgbadger-9.2
perl ./Makefile.PL
make
## お好みでどうぞ
# make install
Analyze postgresql.log.YYYY-mm-dd-HH
cd ~/path/to/pgbadger-9.2
./blib/script/pgbadger \
-p '%t:%r:%u@%d:[%p]:' \
--outfile your_file_name.html \
~/path/to/postgresql.log-YYYY-mm-dd-HH
open ./your_file_name.html
pgBadger view
出来た HTML を開くとこんな画面です。なかなかかっこよい。
画面上部の項目から統計情報が色々と見れるので小一時間は潰せますね。
肝心のクエリ解析ですが、Top という項目から見ることができます。
この画面内にいかにもといった期待を感じさせるメニューが並んでいます。
Slowest individual queries
単体で最も遅いクエリをランキングで表示
Time consuming queries
最もPostgreSQLの時間を消費したクエリをランキング表示
地味にありがたいことに、クエリ部分をダブルクリックすると見やすく indent してくれます。こういう細かい部分に顕れるのがおもてなしの心って奴なんでしょうねぇ。。
他には、Most frequent queries (実行回数の多い順)、Normalized slowest queries (正規化した時に遅い順) もあるので、これで当たりをつけて粛々と Analyze できる訳です。
以上、ご紹介した以外にも便利機能のある pgBadger、使う機会に恵まれることはそれほどありませんがオススメできます。
みなさまの快適な Profiling 生活に幸多からんことを。