実行に時間のかかるSQLを記録する
twitterにハマって1ヶ月も放置していたけれど、今日からまた再開。
現在SQLの最適化で絶賛悩み中。下手くそなSQLのせいで、100万件のデータを毎回全部読んでしまう。
コンソールから直接SQLを流して、平均2〜3秒。PHPのアプリ経由だと5秒以上かかる。
お話にならないので、色々最適化する方法を調べていたら、MySQLでは実行に時間のかかったSQLをログ記録してくれる「スロークエリログ」とかいう機能があるらしい。ので、早速設定。
;; my.cnfファイルを編集 [mysqld] 何だかんだ log-slow-queries=/var/log/mysqld-slow.log long-query-time=2 log-queries-not-using-indexes
実行時に「long-query-time」で設定した秒数以上かかったSQLを「/var/log/mysqld-slow.log」に記録してくれる。さらに、全件スキャンしてるSQLも記録してくれるそうなので、パフォーマンスの分析に役立つみたい。
閲覧時は、単純にlessやcatでも良いけど、
$ mysqldumpslow /path/to/slow_log
だと見やすく整形してくれるらしい。
こりゃ便利!!
だけど、どう最適化したらいいのかな〜(・x・ ).o0○