MySQLのスロークエリの秒数を動的に変更したり、開始・停止する方法




投稿日:

MySQLのスロークエリログ、便利ですよね。これは動的にオンラインのままに変更が可能なのでさらに便利です。今回はスロークエリの秒数を動的に変更する時の方法です。



MySQLにログインをして現状を確認。

mysql> show variables like 'slow_query%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_query_log      | ON                                   |
| slow_query_log_file | /usr/local/mysql/test/slow.log |
+---------------------+--------------------------------------+
2 rows in set (0.00 sec)

起動しており、ログも出力されています。

スローログの秒数を見てみます。

mysql> show variables like 'long_query%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 2.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

では、スロークエリを1秒以上かかったクエリを記録するようにします。

mysql> set global slow_query_log=1;

変化したかを確認します。

mysql> show variables like 'long_query%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 2.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

変化していません。あれ? 
実は、一度ログアウトしてログインしなおすことで数値が変更されています。

続いて、スロークエリログの起動・停止についてです。

スロークエリ記録中にログファイルを変に触ってしまうと止まってしまうので、そんなときもスローログの再起動が必要です。

スロークエリログを停止する。

mysql> set global slow_query_log = OFF;
Query OK, 0 rows affected (0.12 sec)

スロークエリログを起動する。

mysql> set global slow_query_log = ON;
Query OK, 0 rows affected (0.12 sec)

スローログファイルを確認する。

mysql> set global slow_query_log_file = '/usr/local/mysql/test/slow.log';
Query OK, 0 rows affected (0.01 sec)