MySQL5.1のスロークエリ設定中。
CakePHPのSQL負荷が気になったので、開発サーバにスロークエリ入れてみました。
私が個人でしょぼしょぼ動かしてるだけのサーバ設定しても検出できるのか?という疑問が今まであったのですが、
MySQL5.1にすると、マイクロ秒単位、0秒単位にすれば全クエリのスロークエリを検出できると聞いて、MySQLのバージョンアップ決意しました。
漢(オトコ)のコンピュータ道: MySQL 5.1のスロークエリログ
http://ftp.ku.ac.th/pub/mirror/mysql/doc/refman/5.1/ja/log-tables.html
http://ftp.ku.ac.th/pub/mirror/mysql/doc/refman/5.1/ja/slow-query-log.html
しかも、mysqlを稼動したままスロークエリ設定変更できるので、オンラインで「今のクエリ負荷みたい」と抽出も可能なんだとか (^^)
2009-04-14
MySQLをver5.1.41にしてから、以下スロークエリ出力設定の作業ログ。
my.confに設定追加
[root@cake ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
(中略)
#slow-query
log_output=FILE
slow_query_log=ON
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=0.01
[root@cake ~]# /etc/init.d/mysqld restart
MySQL を停止中: [ OK ]
MySQL を起動中: [ OK ]
で、mysqlで適当にSELECTなどしてみましたが、ログが出力されません。
エラーログ/var/log/mysqld.log を見て、mysql_upgradeの実行など行いましたが、エラーログが出なくなってもスロークエリはでない。
だめもとで、mysqlのコマンドラインから設定したら・・・・・
出力されました。
なぜ??
うまく行った設定は、以下の通り。
mysql> SET GLOBAL slow_query_log = "ON"; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL log_output='FILE'; Query OK, 0 rows affected (0.00 sec) mysql> set global slow_query_log_file = '/var/log/mysql-slow.log'; Query OK, 0 rows affected (0.00 sec) mysql> set global long_query_time = 0; Query OK, 0 rows affected (0.00 sec)
SET GLOBAL log_output='TABLE,FILE';
だと、mysql.log_outputテーブルと、指定のログファイル両方に出力OK
long_query_timeは、0.01とかにしても出力されます。
設定値は
mysql> show variables like [設定名];
で確認可能。
my.confからの設定では、なぜ上手くいかないんでしょう・・・・・