MySQLクエリのトラブルシューティング方法

Note

ユーザーは、データに対するクエリの発行を開始すると問題が発生する場合があります。 MySQLを含む一部のデータベースシステムでは、次の例のように、クエリを完了するには、のクエリステートメントをセミコロン(;)で終了する必要があります。

SHOW * FROM table_name;

クエリの最後にセミコロンを含めなかった場合、セミコロンを入力してENTERを押してクエリを完了するまで、プロンプトは新しい行に続きます。

一部のユーザーは、クエリが非常に遅いことに気付く場合があります。 どのクエリステートメントがスローダウンの原因であるかを見つける1つの方法は、MySQLのスロークエリログを有効にして表示することです。 これを行うには、MySQLサーバーのオプションを構成するために使用されるmysqld.cnfファイルを開きます。 このファイルは通常、/etc/mysql/mysql.conf.d/ディレクトリに保存されます。

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

次の行が表示されるまでファイルをスクロールします。

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
#slow_query_log         = 1
#slow_query_log_file    = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
. . .

これらのコメントアウトされたディレクティブは、スロークエリログのMySQLのデフォルト設定オプションを提供します。 具体的には、次のとおりです。

  • slow-query-log:これを1に設定すると、遅いクエリログが有効になります。

  • slow-query-log-file:これは、MySQLが遅いクエリをログに記録するファイルを定義します。 この場合、/var/log/mysql-slow.logファイルを指します。

  • long_query_time:このディレクティブを2に設定すると、完了までに2秒以上かかるクエリをログに記録するようにMySQLが構成されます。

  • log_queries_not_using_indexes:これは、インデックスなしで実行されるクエリも/var/log/mysql-slow.logファイルに記録するようにMySQLに指示します。 この設定は、スロークエリログが機能するために必須ではありませんが、非効率的なクエリを見つけるのに役立ちます。

先頭のポンド記号(#)を削除して、これらの各行のコメントを解除します。 セクションは次のようになります。

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
. . .

[。注意]##

Note: MySQL 8以降を実行している場合、これらのコメント行はデフォルトではmysqld.cnfファイルに含まれません。 この場合、ファイルの最後に次の行を追加します。

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes

スロークエリログを有効にした後、ファイルを保存して閉じます。 次に、MySQLサービスを再起動します。

sudo systemctl restart mysql

これらの設定を行うと、スロークエリログを表示して問題のあるクエリステートメントを見つけることができます。 次のように、lessを使用してこれを行うことができます。

sudo less /var/log/mysql_slow.log

速度低下の原因となるクエリを特定したら、How To Optimize Queries and Tables in MySQL and MariaDB on a VPSに関するガイドがクエリの最適化に役立つ場合があります。

さらに、MySQLにはEXPLAINステートメントが含まれています。これは、MySQLがクエリを実行する方法に関する情報を提供します。 This page from the official MySQL documentationは、EXPLAINを使用して非効率的なクエリを強調表示する方法に関する洞察を提供します。

基本的なクエリ構造を理解するためのヘルプについては、Introduction to MySQL Queriesを参照してください。

Related