====== MySQL - slow log ======
$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';
====== オンラインで変更 ======
===== 5.0 =====
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になっているとインデックスを使っていないクエリが保存される
===== 5.1以降 =====
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)
{{tag>mysql}}