MySQL データベースの日常使用では、クエリの速度と効率を向上させるために、通常、インデックスとオプティマイザーを使用します。ただし、場合によっては、問題をより正確に見つけてデータベースをより正確に最適化するために、クエリ ステートメントの具体的な実行についても知る必要があります。このとき、MySQLのSlow Query Log機能を使用する必要があります。
スロー クエリ ログには、実行時間が特定のしきい値を超えたすべての SQL ステートメントを記録できるため、トラブルシューティングと最適化が可能です。この記事では、MySQL データベースでスロー クエリ ログを有効にする方法を紹介し、スロー クエリ ログの関連パラメータと最適化方法について詳しく説明します。
1. スロー クエリ ログを有効にする
次の設定を MySQL 設定ファイル my.cnf または my.ini に追加します。 :
slow_query_log = 1 #开启慢查询日志 slow_query_log_file = /var/log/mysql/mysql-slow.log #日志文件路径 long_query_time = 3 #超过3s即为慢查询 log_queries_not_using_indexes = 1 #记录未使用索引的查询
このうち、slow_query_log = 1 はスロー クエリ ログをオンにすることを意味し、slow_query_log_file はスロー クエリ ログ ファイルのパスと名前を指定します。long_query_time は、クエリ実行時間が何秒を超えるとクエリ実行時間が経過するとみなされるかを示します。遅いクエリ。log_queries_not_using_indexes は、レコードがインデックス クエリで使用されていないかどうかを意味します。
構成ファイルの変更に加えて、SET コマンドを使用してパラメーターを動的に変更することもできます。たとえば、次のステートメントを使用して、MySQL コマンド ラインでスロー クエリ ログを有効にすることができます。
mysql> SET global slow_query_log = 1; mysql> SET global slow_query_log_file = '/var/log/mysql/mysql-slow.log'; mysql> SET global long_query_time = 3; mysql> SET global log_queries_not_using_indexes = 1;
上記のコードで、SET global は、グローバルに有効になることを意味します。つまり、すべての接続でこれらのパラメータ。
もちろん、ローカル接続のパラメータを設定したいだけの場合は、SET SESSION コマンドを使用できます。例:
mysql> SET SESSION slow_query_log = 1; mysql> SET SESSION slow_query_log_file = '/var/log/mysql/mysql-slow.log'; mysql> SET SESSION long_query_time = 3; mysql> SET SESSION log_queries_not_using_indexes = 1;
2. スロー クエリ ログ構成パラメータを最適化する
スロー クエリ ログを有効にする前に、次のことを確認する必要があります。指定されたログ ファイルが既に存在しており、書き込み権限があることを確認します。ディレクトリが存在しない場合は、最初にディレクトリを作成する必要があります。
次のコマンドを使用して、MySQL プロセスの現在の作業ディレクトリを表示できます:
mysql> SHOW VARIABLES LIKE 'datadir'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+ 1 row in set (0.00 sec)
上の例からわかるように、MySQL プロセスの作業ディレクトリは /var/ です。 lib/mysql/ のディレクトリの下の logs ディレクトリに、slow.log ファイルがあります。したがって、スロー クエリ ログをこのファイルに書き込みたい場合は、次の設定を my.cnf に追加するだけで済みます:
slow_query_log_file = /var/lib/mysql/logs/slow.log
default long_query_time値は 10 秒です。これは、実行に 10 秒以上かかるクエリ ステートメントのみがスロー クエリ ログに記録されることを意味します。通常の状況では、この時間は少し長くなる可能性があります。実際の状況に基づいてより短い時間を設定して、遅いクエリをより早く発見することができます。
クエリ ステートメントの実行に時間がかかる理由は、ステートメント自体が非効率であることが多く、通常は最適化する必要があります。実際の使用では、long_query_time 時間を徐々に短縮して、効率の悪いステートメントを検出し、最適化し、クエリ効率を向上させることができます。
log_queries_not_using_indexes パラメーターが 1 に設定されている場合、インデックスを使用せずに実行されたすべてのクエリがログに記録されます。これは、潜在的な問題を特定し、タイムリーに最適化するのに役立ちます。ただし、場合によってはインデックスのないクエリが正常であるため、誤検知が残る可能性があります。
log_queries_not_using_indexes パラメータを使用する場合は注意が必要です。グローバル変数として設定しないことをお勧めします。必要に応じて動的に設定することもできます。このパラメータが常にオンになっていると、MySQL のパフォーマンスに悪影響が生じ、データベース全体の動作効率が低下する可能性があるためです。
3. スロー クエリ ログの表示と分析
スロー クエリ ログをオンにすると、MySQL は実行時間がしきい値を超えたすべてのクエリ ステートメントの記録を開始します。次のコマンドを使用してスロー クエリ ログを表示できます:
mysql> SHOW VARIABLES LIKE 'slow_query_log_file'; +---------------------+------------------------+ | Variable_name | Value | +---------------------+------------------------+ | slow_query_log_file | /var/lib/mysql/slow.log | +---------------------+------------------------+ 1 row in set (0.00 sec)
上記の出力からわかるように、現在のスロー クエリ ログ ファイルのパスは /var/lib/mysql/slow.log です。
スロークエリログの特定の内容を表示したい場合は、次のコマンドを使用できます:
mysql> mysqldumpslow -s t /var/lib/mysql/slow.log
このうち、-s は時間順に並べ替えることを意味し、-t は表示のみを意味します。最初の 10 レコード。すべてのクエリ レコードを表示したい場合は、-t パラメータを削除できます。
4. スロー クエリ ログの最適化
スロー クエリ ログを有効にすることは、パフォーマンスの問題を発見して最適化するのに役立つ非常に良い方法です。ただし、実際の使用では次の点にも注意する必要があります。
つまり、MySQL スロー クエリ ログを有効にすることは良い習慣です。運用環境では、パラメータを慎重に構成し、関連ツールを使用してデータベースのパフォーマンスと安定性を確保する必要があります。
以上がmysqlでスロークエリログを有効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。