I always forget how to do this, so finally decided to write it down (I’m talking about mysql > 5.1):
- Login to mysql with administrator rights
-
Inspect current variables before changing those (optional):
mysql> show variables like 'long_query_time' \G; *************************** 1. row *************************** Variable_name: long_query_time Value: 10.000000 1 row in set (0.00 sec) mysql> show variables like 'slow_query_log' \G; *************************** 1. row *************************** Variable_name: slow_query_log Value: OFF 1 row in set (0.00 sec) mysql> show variables like 'log_output' \G; *************************** 1. row *************************** Variable_name: log_output Value: FILE 1 row in set (0.00 sec) mysql> show variables like 'slow_query_log_file' \G; *************************** 1. row *************************** Variable_name: slow_query_log_file Value: /var/lib/mysql/web01-slow.log 1 row in set (0.00 sec)
-
Adjust values to your needs, in my example I will be logging queries which took longer than 50ms
mysql> set global long_query_time = 0.05; Query OK, 0 rows affected (0.01 sec) mysql> set global slow_query_log = 1; Query OK, 0 rows affected (0.04 sec) mysql> flush logs; Query OK, 0 rows affected (0.01 sec)
Update: If you are runing Perocona server, you may want to do
set global log_slow_verbosity = full;
to get additional info for query analysis. Here is more detailed post about it.At this point your log file should start growing and getting data. Make sure you disable it after a while (depends on the workload), so you don’t run out of space if there are too many queries that fit into you time
long_query_time
span. Plus it will put more load on the server.To disable on the fly just run:
mysql> set global slow_query_log = 0; Query OK, 0 rows affected (0.01 sec)
-
Analyze resulted log file with mk-query-digest to find the most offensive queries and fix those
mk-query-digest /path/to/slow.log
Leave a Reply