mysqlでスロークエリをチェック

2011/05/30

パフォーマンスネタを暫く続けようかと思い立ったので、まずはmysqlから。

mysqlの場合、スロークエリを無くすことが一つの指標になりますので、まずはチェックできる環境を構築します。(mysql5.5で実施)

スロークエリ設定

mysqlといえばこのブログ、漢のコンピュータ道。いつも勉強させてもらってます。そこの「MySQL 5.1のスロークエリログ」を参考にして、

[mysqld]
slow_query_log=ON
slow_query_log_file=mysql-slow.log
long_query_time=0

まずは試しにlong_query_time=0にして動作チェックしてみる。
この設定をmysql再起動して反映。

#/etc/rc.d/init.d/mysqld stop
#/etc/rc.d/init.d/mysqld start

restartでも問題ないと思いますが念のため。
ていうか、mysql-slow.logってどこなの?と思い探してみる。

find / -name mysql-slow.log

ここにありました。

/usr/local/src/mysql-5.5.11-linux2.6-i686/data/mysql-slow.log

ちなみにmysql5.5はソースからインストールしました。で適当にアクセスしてみてみて、mysql-slow.logにごにょごにょ追記されているのを確認。じゃ、ファイルじゃなくてテーブルに保存してみる。

[mysqld]
slow_query_log=ON
long_query_time=0
log_output=TABLE

最初保存されるテーブルがどこにあるか分かりませんでしたが、mysqlというDBにshow_logテーブルを発見。中を見るといきなり1000件を越すレコードががが。long_query_timeを現実的に0.1にすると、止まりました。

結果

まだまだレコード数もなけりゃアクセスもないので、0.1秒を越すようなクエリは無いってことですなー。

補足

さすがに0.01になると以下のクエリが引っかかりました。

select * from followers where tukkomi_flg=0 and delete_flg=0 order by rand() limit 0,1

これはwordpressじゃなくて@tukkomimuraのクエリw やはりrand()は重いようですね。。。あと*指定も改善の余地あり><

コメントを残す

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