LoginSignup
22
15

More than 5 years have passed since last update.

RDSでmysqldumpslowを使う

Last updated at Posted at 2015-11-15

初期設定

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

22
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
15