LoginSignup
44
47

More than 5 years have passed since last update.

MySQL 5.5系で slow queryを見張る設定

Last updated at Posted at 2015-01-08

とにもかくにも、何はともかく、slow query退治は大事である。ほっとくと、DBサーバがあっという間にアップアップしてしまう。

作ってしまった後に、手を入れると絶対に大変だし、MySQL慣れしてない人が書いたクエリなんかもちゃんと指摘しないといけないし、いろいろとあるので、プロジェクト開始直後から厳しく、綿密にチェックする必要がある。

確認

mysql -u rootで入り

show variables like 'slow%';
show variables like 'long%';

設定

mysql -u rootで入り

set global log_output = 'TABLE';
set global long_query_time = 0.3;
set global slow_query_log = ON;

私は出力先がTABLEのほうがいろいろツブシがきいて好きなのだが、ファイルにする場合にはパスなどもあわせて設定すること。

long_query_time0に指定すると全部slow query扱いになる。0.3という指定もここでは独断と偏見でしているが、プロジェクトの要求仕様に応じても最初から厳しい値にしておいたほうがいい。0.1とか。

見る

select * from mysql.slow_log order by start_time desc limit 10 などすれば、どんなクエリが遅かったのかを確認できる。

muninで見張る

mysqlのプラグインがあるので見張る。とても便利。サンプルとして2枚ばかり貼る。

前述した見る、だと、どうしても手間がかかるので、本番が近くなってくると、こういうので確認し、つぶしていくとよい。

運用が始まったら始まったで、DBが原因で遅いのか?など確認できて非常に便利。

mysql_innodb_rows-day.png

mysql_slow-day-2.png

解決方法

  • ほとんどindexチューンで問題無いことが多い。
    • 次はメモリが足りない、とか、insertが遅い、とかになるが、これはスケールアップするか、マルチマスタを検討する。(筆者はマルチマスタは経験がない)
  • lock_timeが大きくなる場合には、read replicationを増やすことをやらないと解決できないことが多い。
    • 例えば、DBをケチって集計cron参照先と運用が同じDBの場合など、こうなることが多い。
44
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
47