Linux
 Computer >> コンピューター >  >> スマートフォン >> Linux

MySQLでスロークエリログを設定する方法|遅いクエリの原因を特定する手順

本番環境のMySQLサーバーを運用・管理していると、データベースの動作が突然遅くなることがあります。原因となっているクエリを特定するのは容易ではなく、かなりの時間を要する作業になりがちです。そんなときに役立つのが、MySQLに標準搭載されている「スロークエリログ」機能です。

スロークエリログとは

スロークエリログとは、指定した実行時間を超えたクエリを自動的に記録する機能です。このログを有効にしておけば、データベースサーバーの動作が通常より遅いと感じたときに、ログファイルをテキストエディタで開くだけで、どのクエリがボトルネックになっているのかをすぐに確認できます。

my.cnfでスロークエリログを有効化する手順

1. 設定ファイルを開く

まず、MySQLサーバーの設定ファイル my.cnf を開きます。Linux環境では通常 /etc ディレクトリ以下に配置されています。

2. ログの出力先を指定する

log-slow-queries パラメータがすでに設定されているかどうかを確認します。未設定の場合は、以下のように追記してください。

log-slow-queries = /var/log/mysql/mysql-slow.log

3. スロークエリの判定基準(秒数)を設定する

次に、どの程度の実行時間がかかったクエリを「スロークエリ」とみなすかを決めます。例として30秒に設定する場合は、次のように記述します。

long_query_time = 30

MySQLの再起動と動作確認

設定を保存したら、MySQLサーバーを再起動します。その後、mysql-slow.log ファイルを監視しましょう。long_query_time で設定した時間(この例では30秒)よりも完了までに時間がかかったクエリは、すべてこのログファイルに記録されるようになります。

運用のコツ

これでMySQLクエリのデバッグ作業が格段にシンプルかつ迅速になります。ただし、ログファイルは定期的にチェックすることが大切です。確認を忘れがちな場合は、cronジョブを設定して数日おきにログファイルの内容をメールで通知する仕組みを作っておくと便利です。

  1. MySQLクエリで「Empty set」を別の値に置き換える方法

    MySQLでは、該当するレコードが存在しない場合に返されるNULL値を、COALESCE関数を使って別の値に置き換えることができます。検索結果が空になったときに、デフォルト値を表示させたい場面で非常に便利です。COALESCE関数とはCOALESCEは、引数として渡された複数の値の中から、最初にNULLではない値を返す関数です。集計関数(MAXやSUMなど)の結果がNULLになるケースでは、第2引数で指定した代替値が代わりに返されます。サンプルテーブルの作成まず、動作確認用のテーブルを作成します。mysql> create table DemoTable -> ( -&

  2. MySQLで通貨形式を表示する方法:FORMAT()関数の使い方を解説

    MySQLで通貨形式を設定する方法MySQLでは、FORMAT()関数を使うことで、数値データを通貨として見やすい形式に整形して表示できます。この記事では、実際にテーブルを作成し、金額データを「USD 90,948,484.00」のような通貨表記へ変換する手順を、サンプルコード付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、金額を格納するためのテーブルを作成します。ここでは、小数点以下4桁まで保持できるDECIMAL型を使用します。mysql> create table DemoTable    -> ( &nb