一、mysqldumpslow 官方文檔:http://dev.mysql.com/doc/refman/5.1/en/mysqldumpslow.html shell> mysqldumpslow [options] [log_file ...] Table 4.12. mysqldumpslow Option Reference FormatConfig FileDescriptionIntroductionDeprecatedRemoved-aDo not abstract all numbers to N and strings to S-n numAbstract numbers with at least the specified digits--debugdebugWrite debugging information-g patternOnly consider statements that match the pattern--helpDisplay help message and exit-h nameHost name of the server in the log file name-i nameName of the server instance-lDo not subtract lock time from total time-rReverse the sort order-s valueHow to sort output-t numDisplay only first num queries--verboseverboseVerbose mode mysql有一個功能就是可以log下來運行的比較慢的sql語句,默認是沒有這個log的,為了開啟這個功能,要修改my.cnf或者在mysql啟動的時候加入一些參數。如果在my.cnf里面修改,需增加如下幾行 long_query_time = 1 log-slow-queries = /var/youpath/slow.log log-queries-not-using-indexes long_query_time 是指執行超過多久的sql會被log下來,這里是1秒。 log-slow-queries 設置把日志寫在那里,可以為空,系統會給一個缺省的文件host_name-slow.log,我生成的log就在mysql的data目錄 log-queries-not-using-indexes 就是字面意思,log下來沒有使用索引的query。 把上述參數打開,運行一段時間,就可以關掉了,省得影響生產環境。 接下來就是分析了,我這里的文件名字叫host-slow.log。 先mysqldumpslow –help以下,俺主要用的是 -s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default -t NUM just show the top n queries -g PATTERN grep: only consider stmts that include this string -s,是order的順序,說明寫的不夠詳細,俺用下來,包括看了代碼,主要有 c,t,l,r和ac,at,al,ar,分別是按照query次數,時間,lock的時間和返回的記錄數來排序,前面加了a的時倒敘 -t,是top n的意思,即為返回前面多少條的數據 -g,后邊可以寫一個正則匹配模式,大小寫不敏感的 mysqldumpslow -s c -t 20 host-slow.log mysqldumpslow -s r -t 20 host-slow.log 上述命令可以看出訪問次數最多的20個sql語句和返回記錄集最多的20個sql。 mysqldumpslow -t 10 -s t -g “left join” host-slow.log 這個是按照時間返回前10條里面含有左連接的sql語句。 用了這個工具就可以查詢出來那些sql語句是性能的瓶頸,進行優化,比如加索引,該應用的實現方式等。 二、mysqldumpslow MySQL 自帶 slow log 的分析工具 mysqldumpslow ,但是沒有說明。本文通過分析該腳本,介紹了其用法。 slow log 是 MySQL 根據 SQL 語句的執行時間設定,寫入的一個文件,用于分析執行較慢的語句。
只要在 my.cnf 文件中配置好: log-slow-queries = [slow_query_log_filename] 即可記錄超過默認的 10s 執行時間的 SQL 語句。 如果要修改默認設置,可以添加: long_query_time = 5 設定為 5s 。
如果要記錄所有 SQL 語句,可以寫入: log-long-format
# t=time, l=lock time, r=rows # at, al, 以及 ar 是對應的平均值
mysqldumpslow 可以接受的參數有: '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 'verbose|v+',# verbose 'help+', # write usage info 'debug|d+', # debug 's=s', # what to sort by (t, at, l, al, r, ar etc) 'r!', # reverse the sort order (largest last instead of first) 't=i', # just show the top n queries 'a!', # don't abstract all numbers to N and strings to '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 以時間倒序顯示前10個慢查詢日志:mysqldumpslow -s at -t 10 /var/db/mysql/db-slow.log |