X

找出 MySQL 哪些 Query 速度較慢

MySQL 中有內建的設定, 在 my.cnf 中設定:

  • log-slow-queries = [slow_query_log_filename]

即可記錄查詢時間花費超過的 10s的 SQL 語法(Default)。

若要改 5秒 可設定如: long_query_time = 5 即設定為 5s 記錄下來.

如果要記錄所有 SQL 語法,可以寫入:

log-long-format (查看最常用到的欄位加 index)

t=time, l=lock time, r=rows

at, al, 以及 ar 是對應的平均值

Ex: 於 my.cnf ([mysqld]) 加入

log-slow-queries = /var/log/mysql/mysql-slow.log
long_query_time = 5
log-long-format

而那些查詢速度較花時間的語法, 預設會記到 MysSQL 存放處的*-slow.log

但是要怎麼去分析這個 log file, 就要靠 MySQL 的 mysqldumpslow 來分析。

mysqldumpslow(Perl Script), 由裡面接收變數直接撈出來, 可接受的參數有:

  • 'v+', # verbose
  • 'd+', # debug
  • 's=s', # 排序 (t, at, l, al, r, ar etc)
  • 'r!', # 倒排序 (largest last instead of first)
  • 't=i', # 顯示最高的 n 個查詢
  • 'a!', # 不把所有的數位以 N, 字串以 'S' 顯示
  • 'n=i', # abstract numbers with at least n digits within names
  • 'g=s', # grep: only consider stmts that include this string
  • 'h=s', # hostname of db server for *-slow.log filename (can be wildcard)
  • 'i=s', # name of server instance (if using mysql.server startup script)
  • 'l!', # don't subtract lock time from total time

參考: MySQL 自帶的 slow log 分析工具 mysqldumpslow

PS: 另外也是加上 log-query-time 下面的參數: log-queries-not-using-indexes 看起來也不錯, 詳細可見; The Slow Query Log.

Save

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post