スロークエリログの設定
スロークエリログとは、SQL分の実行にかかる時間が設定値以上である場合に出力されるログです。
負荷の高いSQL分を調べるときに重宝します。
スロークエリログを有効にするには、my.cnfに以下のように記述します。
# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql character-set-server = utf8 init-connect = SET NAMES utf8 ~(略)~ ※以下を追記 log_slow_queries long_query_time = 1 slow_query_log_file=mysql-slow.log log-queries-not-using-indexes
この例だと、処理するのに1秒以上かかったSQL文を、mysql-slow.logというファイル名で出力するように設定しています。ログが出力されるディレクトリはdatadirパラメータで指定したパスとなります。
※追記
MySQL5.0.77がインストールされているサーバでは上例では動作せず、以下のように記述すると動作しました。
log_slow_queries=mysql-slow.log long_query_time = 1 log-queries-not-using-indexes
なお、各パラメータの意味は下表の通りです。
| パラメータ名 | 意味 | 記載例 | 記載するセクション |
|---|---|---|---|
| log_slow_queries | スロークエリログの出力の有効/無効の選択 | log_slow_queries(※パラメータなしで記載) | mysqld |
| long_query_time | スロークエリログの出力対象となる秒単位で指定。 ※MySQL5.1からは小数点をつけると1秒未満でも設定可能 |
long_query_time = 1 | mysqld |
| slow_query_log_file | スロークエリログを出力する場所 | slow_query_log_file=mysql-slow.log | mysqld |
| log-queries-not-using-indexes | インデックスを使わない検索をスロークエリログとして出力する | log-queries-not-using-indexes(※パラメータなしで記載) | mysqld |
スロークエリログの見方
実際にスロークエリログを確認してみましょう。
# less /var/lib/mysql/mysql-slow.log
/usr/sbin/mysqld, Version: 5.5.13-log (MySQL Community Server (GPL)). started with:
Tcp port: 0 Unix socket: (null)
Time Id Command Argument
# Time: 110723 13:22:02
# User@Host: root[root] @ localhost []
# Query_time: 7.677186 Lock_time: 0.156390 Rows_sent: 1 Rows_examined: 1386155
use hoge_db;
SET timestamp=1311394922;
SELECT count(*) FROM `hoge_table` WHERE (hoge_time between '2011-07-19 18:00:00' AND '2011-07-19 19:00:00') AND (hoge_id = 1) AND (hage_id = '1');
上記の赤字部分がスロークエリログの一例ですが、
- 1行目 記録日時
- 2行目 ユーザーIDとリクエストした端末
- 3行目 Query_time(実行時間) Lock_time(ロック時間) Rows_sent(送信行数) Rows_examined(処理対象となった行数)
- 4行目 SQL文
という内訳になっています。
スロークエリログ設定の注意点
- ログの出力が多すぎる場合、I/O負荷が高まるので注意する必要がある。
最終更新 2011-07-23

この記事へのコメント
まだコメントは投稿されていません。