スロークエリのログを出力する

MySQL で遅いクエリのログを出力する方法です。

設定

# /etc/my.cnf

[mysqld]
slow_query_log=ON
slow_query_log_file=/var/log/mysql/slow_query.log # ログの場所
long_query_time=0 # 0秒以上かかるクエリを対象にする(0だとすべてのクエリが出力される)
log-queries-not-using-indexes # インデックスを使ってないクエリを出力する

設定を反映させる

$ sudo service mysqld restart

ログファイルを作成して権限を付与する

$ sudo mkdir -p /var/log/mysql/
$ sudo touch /var/log/mysql/slow_query.log
$ sudo chown mysql:mysql /var/log/mysql/slow_query.log

設定されているか確認する

$ mysql -u root -p
mysql> SHOW VARIABLES LIKE 'slow%';
+---------------------+-------------------------------+
| Variable_name       | Value                         |
+---------------------+-------------------------------+
| slow_launch_time    | 2                             |
| slow_query_log      | ON                            |
| slow_query_log_file | /var/log/mysql/slow_query.log |
+---------------------+-------------------------------+
mysql> SHOW VARIABLES LIKE 'long%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 0.000000 |
+-----------------+----------+

出力されたログを集計して確認する

$  mysqldumpslow -s t /var/log/mysql/slow_query.log