パフォーマンスネタを暫く続けようかと思い立ったので、まずはmysqlから。
mysqlの場合、スロークエリを無くすことが一つの指標になりますので、まずはチェックできる環境を構築します。(mysql5.5で実施)
スロークエリ設定
mysqlといえばこのブログ、漢のコンピュータ道。いつも勉強させてもらってます。そこの「MySQL 5.1のスロークエリログ」を参考にして、
[mysqld]
slow_query_log=ON
slow_query_log_file=mysql-slow.log
long_query_time=0
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
#/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
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()は重いようですね。。。あと*指定も改善の余地あり><