[MySQL]実行が遅いSQL命令(スロークエリ)を見つける

mysql_logo_large

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

スロークエリを出力して原因を調査する

ウェブページの表示が遅いとき、もっとも多い原因となるのは SQL の実行に時間がかかっている可能性です。今回は実行が遅い SQL を見つける方法であるスロークエリの使い方をお伝えいします。

 

スロークエリーの出力設定

スロークエリーを確認したいときは、MySQL の設定ファイルである my.cnf にスロークエリー(実行が遅いsql)を出力する設定を行います。Linux の OS により設定ファイルのパスは差異がある可能性がありますが、/etc/my.cnf であることが多いです。

スロークエリの出力設定を行ったサンプル

[mysqld]の項目の末尾に設定を追加します。

long_query_time 実行時間が何秒以上を出力対象にするか
log-slow-queries ログファイルの出力パス

※long_query_timeは、mysql5.1から1秒未満(0.1など)の設定が可能です。

MySQL 設定ファイルの変更後には、mysql の再起動を行う必要があります。

 

実行する全てのsql命令を出力する

スロークエリーの設定を応用して、実行した全ての sql をログ出力することができます。

設定方法は「long_query_time = 0」を設定するだけです。主な利用用途として、開発に携わっていないWeb開発プロジェクトのページの表示速度が遅いときの原因究明に重宝します。

「long_query_time = 0」を設定したときのログを転記します。

 

スロークエリ―の設定確認

slow_queryが有効になっているかの確認方法を記載します。設定後の念のための確認、またはslow_queryを設定したはずなのに正常に動作していないのでは?と感じたときにチェックして下さい。
※スロークエリ―の設定確認を行うときはroot権限が必要です。

「slow_query_log」が「ON」のとき、「slow_query_log_file」にログが出力されます。

実行時間が「long_query_time」の設定値を超えるクエリがスロークエリとして出力されます。