$vi my.cnfで以下を記述 long_query_time=3 log-slow-queries=/var/log/slow.log
これにより3秒以上処理に時間のかかるクエリの特定が可能(long_query_timeで指定)なのでそのクエリを見直す。
これで動いてるプロセスを見ることもできる。
mysql > show full processlist; mysql> SHOW PROCESSLIST; mysql> SHOW FULL PROCESSLIST;
以下がイコールなので、下だとwhereが使える
mysql> SELECT * FROM information_schema.PROCESSLIST where COMMAND='Query';
mysql> set global log-slow-queries = '/tmp/mysql-slow.log'; mysql> set global long_query_time = 1; mysql> set global log_queries_not_using_indexes=0;
long_query_timeで設定した時間よりも短い結果で返ってくるクエリが保存されていた
原因はlog_queries_not_using_indexesがONになっていた。
これがONになっているとインデックスを使っていないクエリが保存される
mysql> set global slow_query_log_file = '/tmp/mysql-slow.log'; mysql> set global long_query_time = 5; mysql> set global slow_query_log = ON;
mysql> SHOW VARIABLES LIKE 'slow_query_%'; +---------------------+--------------------------------------+ | Variable_name | Value | +---------------------+--------------------------------------+ | slow_query_log | OFF | | slow_query_log_file | /var/lib/mysql/09e382d8d897-slow.log | +---------------------+--------------------------------------+ 2 rows in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.00 sec)