クエリログを確認する方法

自作サイトにタグ検索機能を入れているのですが、これがどうも遅くて困りました。

いったいどんなクエリが走ったらこんなに遅くなるのか。ちょっと確認してみよう。

。。。

あれ。。。

実行されてるクエリって、どこで確認するんだ…?

そんな人のためのエントリーです。

基本設定

「クエリログ」等のキーワードでググればたくさんの記事がヒットするはずです。

自分は以下のページを読みました。

公式リファレンス

MySQLのクエリログを取得する方法

スロークエリログの設定

MySQL 5.1のスロークエリログ

 

基本的には、

・/etc/my.conf で出力先のファイル等を指定

・mysqld_safeの実行オプションに –log と –log-slow-queriesをつける(mysqldファイル内で設定)

・mysqld restart

という流れなのかと思います。

 

自分の場合は以下の様な感じでした。

-> % sudo vi /etc/rc.d/init.d/mysqld

$exec --datadir="$datadir" --socket="$socketfile" \
--log --log-slow-queries \
--pid-file="$mypidfile" \
--basedir=/usr --user=mysql >/dev/null 2>&1 &
※2行目追加  

再起動
-> % sudo /etc/rc.d/init.d/mysqld restart

普通ならこれでいけるっぽいです。

 

おまけ(ログ出力先の確認方法)

おまけというか、自分は最初、上のやり方では上手くいきませんでした。

–log オプション付きで実行はできているけれど、 /etc/my.conf に設定したファイルにログが出力されない。

という状況でした。(/etc/my.confの読み込み設定がうまく出来ていない模様。調査中)

そんな状況になったとき、どのように現在のmysqlの実行状況を知るかを書いておきます。

mysqlに繋いで以下のコマンドを打ちます。


mysql> SHOW VARIABLES;


するとMySQLの様々な設定項目を確認できます。


| general_log | ON |
| general_log_file | /var/run/mysqld/mysqld.log |

| slow_query_log | ON |
| slow_query_log_file | /var/run/mysqld/mysqld-slow.log |


このあたりが大事です。ONになっていなかったらログは出力されません。

log_fileがログの出力先です。

自分の環境ではちゃんと上に示した2つのファイルにログが出力されていました。

tail -f /var/run/mysqld/mysqld.log としておいてページを読み込んだりするとクエリのログをリアルタイムに確認できます。

終わりに

クエリログを確認したら案の定無駄なクエリが走っていました。

修正して、タグ検索がだいぶ速くなって嬉しいです。

クエリログは超大量に出力されてしまうので必要なときだけ出すのが良いかもしれません。