MySQLを再起動せずにスロークエリログを有効化する方法【SETコマンドで簡単設定】
SETステートメントでスロークエリログを動的に有効化する
MySQLでは、SETステートメントを使うことで、サーバーを再起動することなくスロークエリログ(低速クエリログ)を有効化できます。設定変更が即座に反映されるため、本番環境でもサービスを停止させることなくパフォーマンス調査を開始できるのが大きなメリットです。
基本構文
SET GLOBAL slow_query_log = 'Value';
上記構文の「Value」部分には、ON または OFF を指定します。スロークエリログを有効にするには、以下のように実行します。
mysql> SET GLOBAL slow_query_log = 'ON'; Query OK, 0 rows affected (0.00 sec)
スロークエリログが有効になっているか確認する
設定が正しく反映されたかどうかは、次のクエリで確認できます。
mysql> SHOW GLOBAL VARIABLES LIKE 'slow\_%';
実行結果は以下のとおりです。
+---------------------+--------------------------+ | Variable_name | Value | +---------------------+--------------------------+ | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | DESKTOP-QN2RB3H-slow.log | +---------------------+--------------------------+ 3 rows in set (0.00 sec)
slow_query_log の値が ON になっていれば、スロークエリログは正常に有効化されています。また、slow_query_log_file には、実際にログが出力されるファイル名が表示されます。
記録対象となる秒数(long_query_time)を設定する
ここで指定した秒数を超えて実行されたクエリが、スロークエリログファイルに記録されます。デフォルト値は10秒ですが、要件に応じて自由に変更できます。以下は、しきい値を20秒に設定する例です。
mysql> SET GLOBAL long_query_time = 20; Query OK, 0 rows affected (0.00 sec)
設定が正しく挿入されているか確認しましょう。
mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time';
上記クエリの実行結果は以下のとおりです。
+-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 20.000000 | +-----------------+-----------+ 1 row in set (0.00 sec)
ログをフラッシュして設定を確定させる
ここまでの設定作業が完了したら、最後にログをフラッシュして変更内容を確定させます。
mysql> FLUSH LOGS; Query OK, 0 rows affected (0.25 sec)
補足:my.cnfによる恒久的な設定について
注意: SET GLOBAL による設定はあくまで一時的なものであり、MySQLを再起動すると元の状態に戻ってしまいます。設定を恒久的に維持したい場合は、設定ファイル my.cnf(Windows環境では my.ini)に以下のように記述してください。
[mysqld] slow_query_log = 1 long_query_time = 20
逆に、スロークエリログを恒久的に無効化したい場合は、slow_query_log = 0 を設定します。運用環境に合わせて、動的な設定と恒久的な設定を使い分けることをおすすめします。
-
MySQLでInnoDBをインストールまたは有効化する方法
MySQLでInnoDBストレージエンジンを有効にするには、設定ファイルmy.ini(Linux環境の場合はmy.cnf)を編集する必要があります。MySQL 8以降ではInnoDBがデフォルトなお、MySQL 8.0以降では、デフォルトのストレージエンジンとしてInnoDBが標準で採用されているため、通常は特別な設定を行わなくてもInnoDBを使用できます。現在の設定はmy.iniファイルで確認しましょう。デフォルトストレージエンジンを明示的に指定したい場合は、設定ファイルに以下のように記述します。[mysqld]default-storage-engine=InnoDBまた、サーバー側で現
-
MySQLクエリでOR文が多すぎるのを避けるには?IN()の活用方法を解説
MySQLでは、複数の条件を指定するときにOR文を何度も繰り返し書くと、クエリが長くなり読みにくくなります。そんなときはIN()を使うことで、クエリをシンプルかつ効率的に記述できます。この記事では、実際にテーブルを作成し、IN()の使い方を実行例とともにわかりやすく解説します。 サンプルテーブルを作成する まず、動作確認用のテーブルを作成しましょう。以下のコマンドで「DemoTable」を作成します。 mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMAR