BLOGTIMES
2018/10/18

mysqldumpslow をヒントに MariaDB/MySQL をチューニング

  mysql  tuning 
このエントリーをはてなブックマークに追加

あるプロジェクトで使っている MySQL(というか MariaDB)が遅いので、mysqldumpslow を使ってチューニングしてみました。

mysqldumpslow*1 というのは slow ログファイルを解析して、要約を表示してくれるユーティリティで、これを使うと slow ログの中でもよりボトルネックになっているクエリを探し出すことができます

まずは slow ログを MariaDB/MySQL に吐かせる

mysqldumpslow を使うためには、対象となる slow ログ(時間がかかる SQL のログ)を手に入れる必要があります。
通常の MariaDB/MySQL では、slow ログは以下のように無効になっているはずです

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'slow_query%'; +---------------------+------------------+ | Variable_name | Value | +---------------------+------------------+ | slow_query_log | OFF | | slow_query_log_file | hostname-slow.log | +---------------------+------------------+ 2 rows in set (0.00 sec) MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'long_query%'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 2.000000 | +-----------------+----------+ 1 row in set (0.00 sec)

これを以下のクエリによって書き換えてやります。
設定は即時有効になりますが、再起動時には元に戻ります。常に出力する場合には my.cnf に定義を書込んでください。
また、ここでは slow ログの閾値を 0.5 秒としていますが、場合によってはもっと小さくした方が良いかもしれません。

SET GLOBAL long_query_time = 0.5; SET GLOBAL slow_query_log = 'ON'; FLUSH LOGS;

slow ログを mysqldumpslow に喰わせる

あとは出力された slow ログを以下のような感じで mysqldumpslow に喰わせると結果を得ることができます。

mysqldumpslow /path/to/hostname-slow.log | less

クエリ内の数値や文字列は 'S' や 'N' に置換されて纏められるので、slow ログの量が多くても出力結果はかなり少なくなっているはずです。あとはこの出力結果を EXPLAIN して、クエリの実行計画を見ながらインデックスなどを調整してやれば OK です。


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10513
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン