Database JUNKY

MySQL,MariaDBを中心としたブログです

遅いクエリーを検出する②~ mysqldumpslowの活用

インデクスチューニングしようと、漠然と、tail -f mysqld-slow.log を確認しようと思ったら、ウチの会社に協力していただいている某社さんから、「もっと簡単に見れるツールがあるよ」といわれました。それが

mysqldumpslow

何それ?。。。

うそ!?こんなツールあったの?って本当に、mysqlは無知です。僕。DBMSという基礎の部分の考え方は、どんなDBMSであろうが大差はないのかと思っているのですが、細かい部分になると、やはりながくMySQLを使っている方に聞くのが一番だと実感しました。すごく勉強になりました。これからも色々聞こうっと、お返しには、db2を教えてあげよう(W

mysqldumpslowは、slow.logを、集計して、一番時間がかかっているクエリを出してくれます。ためしにこのサイトで 一番時間がかかっているクエリはなんなの?というのを調べたいときは、こんな感じで実行します。

# mysqldumpslow -s -t /var/lib/mysql/mysqld-slow.log  | less まあ、ここのサイトは優秀なので(つか誰も見に来てないよ!)たいしたログはでてきませんでした、 Count: 2  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@WWW.s-QUAD.COM SELECT ID FROM wp_posts WHERE post_status = 'S' AND DATE_SUB( NOW(), INTERVAL N DAY ) > post_date 自分のところなんで参考ににならなくてもうしわけありませんが、ざっくりとは、COUNTが回数で、Timeがかかった秒数です。 ヘルプを参照したところ色々オプションがありまして細かく設定できそうですね。リアルタイムの監視ではなく、一週間まとめて、じっくりとチューニングしたいなんて場合はtail -fなんかしないでこちらで集計をとってやったほうがお勧めかも。
    # mysqldumpslow --help
    Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]

    Parse and summarize the MySQL slow query log. Options are

    --verbose    verbose
    --debug      debug
    --help       write this text to standard output

    -v           verbose
    -d           debug
    -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default
    al: average lock time
    ar: average rows sent
    at: average query time
    c: count
    l: lock time
    r: rows sent
    t: query time
    -r           reverse the sort order (largest last instead of first)
    -t NUM       just show the top n queries
    -a           don't abstract all numbers to N and strings to 'S'
    -n NUM       abstract numbers with at least n digits within names
    -g PATTERN   grep: only consider stmts that include this string
    -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
    default is '*', i.e. match all
    -i NAME      name of server instance (if using mysql.server startup script)
    -l           don't subtract lock time from total time
# mysqldumpslow --help Usage: mysqldumpslow [ OPTS... ] [ LOGS... ] Parse and summarize the MySQL slow query log. Options are --verbose    verbose --debug      debug --help       write this text to standard output -v           verbose -d           debug -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default al: average lock time ar: average rows sent at: average query time c: count l: lock time r: rows sent t: query time -r           reverse the sort order (largest last instead of first) -t NUM       just show the top n queries -a           don't abstract all numbers to N and strings to 'S' -n NUM       abstract numbers with at least n digits within names -g PATTERN   grep: only consider stmts that include this string -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard), default is '*', i.e. match all -i NAME      name of server instance (if using mysql.server startup script) -l           don't subtract lock time from total time