MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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 を設定します。運用環境に合わせて、動的な設定と恒久的な設定を使い分けることをおすすめします。

  1. MySQLでInnoDBをインストールまたは有効化する方法

    MySQLでInnoDBストレージエンジンを有効にするには、設定ファイルmy.ini(Linux環境の場合はmy.cnf)を編集する必要があります。MySQL 8以降ではInnoDBがデフォルトなお、MySQL 8.0以降では、デフォルトのストレージエンジンとしてInnoDBが標準で採用されているため、通常は特別な設定を行わなくてもInnoDBを使用できます。現在の設定はmy.iniファイルで確認しましょう。デフォルトストレージエンジンを明示的に指定したい場合は、設定ファイルに以下のように記述します。[mysqld]default-storage-engine=InnoDBまた、サーバー側で現

  2. MySQLクエリでOR文が多すぎるのを避けるには?IN()の活用方法を解説

    MySQLでは、複数の条件を指定するときにOR文を何度も繰り返し書くと、クエリが長くなり読みにくくなります。そんなときはIN()を使うことで、クエリをシンプルかつ効率的に記述できます。この記事では、実際にテーブルを作成し、IN()の使い方を実行例とともにわかりやすく解説します。 サンプルテーブルを作成する まず、動作確認用のテーブルを作成しましょう。以下のコマンドで「DemoTable」を作成します。 mysql> create table DemoTable (     Id int NOT NULL AUTO_INCREMENT PRIMAR