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テーブルに書き出す以外に選択肢は無かったと思うけど、最近はファイルに書き出すことも出来るらしい。

大まかな方針

  1. slow_logテーブルから通常のslow query logファイル形式にエクスポート
  2. 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を定期的に確認してパフォーマンスを改善させる運用フローを作っておくと、システムの規模が大きくなった時にも安心。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です