MySQL の起動中に slow query log を開始する
通常は my.cnf に以下の設定をして restart すればいいのですが、稼働中のサービスの場合、再起動したくないこともあります。
slow_query_log=1
long_query_time=3
そういうときは、set global すれば動的に有効にできます。
mysql> set global slow_query_log=1;
mysql> set global long_query_time=3;
が、なぜか long_query_time の値が反映されません。デフォルトの 10秒のままです。
mysql> show variables like 'slow_query%';
+---------------------+-------------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/ip-10-160-138-xxx-slow.log |
+---------------------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> show variables like ‘long_query%’; +—————–+———–+ | Variable_name | Value | +—————–+———–+ | long_query_time | 10.000000 | +—————–+———–+ 1 row in set (0.00 sec) </code>
実はそれは勘違いで、グローバルシステム変数の変更は、新規のコネクションから有効になるのでした。一旦 quit してから再接続すると、反映されているのが確認できました。
mysql> show variables like 'long_query%';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 3.000000 |
+-----------------+----------+
1 row in set (0.00 sec)