MySQL5.1のスロークエリ設定中。

CakePHPSQL負荷が気になったので、開発サーバにスロークエリ入れてみました。


私が個人でしょぼしょぼ動かしてるだけのサーバ設定しても検出できるのか?という疑問が今まであったのですが、

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からの設定では、なぜ上手くいかないんでしょう・・・・・