Mysqlでインデックスを使っていないクエリをログに残す方法

      2016/05/23

Mysqlでインデックスを使っていないクエリをログに残す方法

Mysqlでは時間の掛かったクエリをログに残すことができる、slow-query-logというオプションが存在します。指定した秒数以上かかった遅いクエリをログに残しておいてくれる機能です。更に、それだけではなくインデックスを利用しないで実行したクエリのログを残すことも可能です。

インデックスを使わなくても、クエリの実行が早ければ別にいいのですが、後々遅くなってきた時の手がかりになるのでログをとっておくと良いと思います。

次にサンプルを紹介します。この設定をしているMysqlのバージョンは5.5.48です。

■遅いクエリとインデックスが使われなかったクエリをログに残す設定

以下のようにmy.cnfに設定をしました。遅いクエリとインデックスが利用されなかったクエリをログに残す設定です。log_queries_not_using_indexesを1にするとインデックスが利用されなかったクエリをログファイルに設定します。SlowQueryに残す秒数は1秒以上かかったクエリに設定しています。

## Logging
slow-query-log                  = 1
slow-query-log-file             = /var/log/mysql/slow-log
long-query-time                 = 1
log_queries_not_using_indexes   = 1

 

上記の設定をmy.cnfに設定してmysqlを再起動、または設定のリロードをすると/var/log/mysql/slow-logに遅いクエリとインデックスが利用されなかったクエリを保存できます。

アプリケーションの初期リリースの時に設定しておくと、遅いクエリを排除しやすくなるかもしれません。参考にしてみてください。では。

megane

megane

最近、個人事業主から法人へと進化しました。 エンジニア歴13年位です。PHPとかMysqlを使ってWebシステムを構築します。 Javaも書きます。 CakePHPも使います。 サーバのチューニングもごりごりやります。 あと、お肉と自動車が好きです。Twitterとか申請どうぞ。

 - mysql , ,