初期設定
RDSのコンソール上で下記を設定してください
- slow_query_log=1
- log_output=FILE
- slow_query_log_file=/rdsdbdata/log/slowquery/mysql-slowquery.log (デフォルト値)
log_outputはデフォルトでTABLEとなっています。
TABLEでも mysql.slow_query テーブルにログが溜まっていくのですが、ほったらかしにしてログが膨れ上がることが多々あるでしょう。
殆どの場合、直近のログさえあれば十分なのに、「mysql.slow_queryが膨れ上がってSELECTの結果が終わらない!!」
ということはしばしばあるかと思います。私もなりました。
FILEにしていれば、1時間毎のログが1日分残ります。これなら、ファイルが大きすぎて分析できない!ということは無いでしょう。
分析方法
まずは、cliからログをDLしてください。
下記のRDSのslowquery.logをまとめてDLするワンライナーを使うといいです。
{rds_instance_name} を書き換えて使ってください。
$ for i in {0..23}; do
aws rds download-db-log-file-portion \
--db-instance-identifier {rds_instance_name} \
--log-file-name slowquery/mysql-slowquery.log.$i \
--output text \
>> slowquery.log; \
done
mysqlclientが入っていれば、mysqldumpslow が一緒に入っています。
ファイルを読み込むだけで、遅いクエリがソートされるので一発で分かります。
$ mysqldumpslow slowquery.log > mysqldumpslow.log
※追記
いつの間にかログに余計な情報が入るようになって、mysqldumpslowの結果がおかしくなってしまってました。
あんまり詳しく調べてませんが、必要ない行を除けば期待したものが見れるので、あんまり深追いしてません。環境の問題なのかもしれません。
$ perl -ne 'print $_ unless /^(?:# Time|SET timestamp)/;' slowquery.log > slowquery-fixed.log
$ mysqldumpslow slowquery-fixed.log > mysqldumpslow.log
参考
権限の問題など、大人の事情でslow_query_log=TABLEのまま運用しなければいけない場合は、以下を参考にするといいです。
http://qiita.com/DianthuDia/items/d235f8fb563ffed89884
aws cliを入れるところからは以下を参考に。
http://qiita.com/ysk_1031/items/0efc7aa17a57316ec328
やっぱり公式ドキュメントが一番ですよね!
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html