Amazon RDS (MySQL)のslow query logを集計する
RDSではslow query logはテーブルに書きだされる。
Amazon RDSのMySQLでは、デフォルトではslow query logはmysqlデータベースのslow_logというテーブルに保存される(※)。
今までの普通のMySQLであれば、slow query logを有効化するとデフォルトではファイルに書きだされて、それをmysqldumpslowで集計・解析するってのが一般的だったと思うけど、テーブルに書きだされると、それにもう一手間必要になってくる。
※以前は、slow_logテーブルに書き出す以外に選択肢は無かったと思うけど、最近はファイルに書き出すことも出来るらしい。
大まかな方針
- slow_logテーブルから通常のslow query logファイル形式にエクスポート
- mysqldumpslowで集計
slow_logをエクスポートするツール2つ
pythonのスクリプト
AWSのフォーラムのスレッド(AWSにログインしていないと見られない)で見つけたこちらのスクリプト。
mysql関連のモジュールがないと動かないので、今回は使用せず。
シェルスクリプト
MySQL Performance Blogの記事で紹介されていたこちらのツール群。そこにexport-slow-log-tableというスクリプトがあるので、それを使う。先頭に以下の行を追加して、
#!/bin/bash
.my.cnf にホスト名、ユーザー名、パスワードを以下のように記載して、
[client] host=xxx.yyy.ap-northeast-1.rds.amazonaws.com user=awsuser password=secretpassword
スクリプトを実行すればOK。
その後
あとは通常通り、エクスポートしたファイルをmysqldumpslowで集計する。
集計が終わったらslow_logテーブルの内容は不要だと思うので、以下のストアドプロシジャでローテートしておく。
CALL mysql.rds_rotate_slow_log;
まとめ
Amazon RDS (MySQL) では、デフォルトではslow query logはslow_logというテーブルに書き込まれるので、それをファイルにエクスポートしてmysqldumpslowで集計する方法を紹介した。で、その結果を利用してボトルネックの調査・分析をする、という流れ。
slow query logを定期的に確認してパフォーマンスを改善させる運用フローを作っておくと、システムの規模が大きくなった時にも安心。