pt-query-digest命令幫助彙總和舉例

chenfeng發表於2019-03-07

pt-query-digest是用於分析mysql慢查詢的一個工具,它可以分析binlog、General log、slowlog,也可以透過show processlist命令或者透過tcpdump

抓取的MySQL協議資料來進行分析。可以把分析結果輸出到檔案中,分析過程是先對查詢語句的條件進行引數化,然後對引數化以後的查詢進行分組

統計,統計出各查詢的執行時間、次數、佔比等,可以藉助分析結果找出問題進行最佳化。預設情況下,該工具分析slow log並會報告哪個查詢最慢。


檢視幫助:

$ pt-query-digest --help

Usage: pt-query-digest [OPTIONS] [FILES] [DSN]

--host      #指定MySQL地址;

--port      #指定MySQL埠;

--socket    #指定MySQL SOCK檔案;

--user      #指定MySQL使用者;

--password  #指定MySQL密碼;

--type      #指定將要分析的型別,預設是slowlog,還有如binlog,general log等;

--charset   #指定字符集;

--filter    #對輸入的慢查詢按指定的字串進行匹配過濾後再進行分析;

--limit     #限制輸出結果百分比或數量,預設值是20,即將最慢的20條語句輸出,如果是50%則按總響應時間佔比從大到小排序,輸出到總和達到50%位置截止;

--review    #將分析結果儲存到表中,這個分析只是對查詢條件進行引數化,一個型別的查詢一條記錄,比較簡單;當下次使用--review時,如果存在相同的語句分析,就不會記錄到資料表中;

--history   #將分析結果儲存到表中,分析結果比較詳細,下次再使用--history時,如果存在相同的語句,且查詢所在的時間區間和歷史表中的不同,則會記錄到資料表中,可以透過查詢同--CHECKSUM來比較某型別查詢的歷史變化;

--since     #從什麼時間開始分析,值為字串,可以是指定的某個"yyyy-mm-dd [hh:mm:ss]"格式的時間點,也可以是簡單的一個時間值:s(秒)、h(小時)、m(分鐘)、d(天),如12h就表示從12小時前開始統計;

--until     #截止時間,配合--since可以分析一段時間內的慢查詢;

--log       #指定輸出的日誌檔案;

--output    #分析結果輸出型別,值可以是report(標準分析報告)、slowlog(Mysql slow log)、json、json-anon;一般使用report,以便於閱讀;

--create-review-table     #當使用--review引數把分析結果輸出到表中時,如果沒有表就自動建立;

--create-history-table    #當使用--history引數把分析結果輸出到表中時,如果沒有表就自動建立;


使用舉例:

1) pt-query-digest分析慢查詢日誌;

$ pt-query-digest --report slow.log

 

2) 報告最近半個小時的慢查詢;

$ pt-query-digest --report --since 1800s slow.log

 

3) 報告一個時間段的慢查詢;

$ pt-query-digest --report --since '2019-02-10 21:48:59' --until '2019-02-16 02:33:50' slow.log

 

4) 報告只含select語句的慢查詢;

$ pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' slow.log

 

5) 報告針對某個使用者的慢查詢;

$ pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' slow.log

 

6) 報告所有的全表掃描或full join的慢查詢;

$ pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes") || (($event->{Full_join} || "") eq "yes")' slow.log

 

7) 把查詢儲存到query_review表;

$ pt-query-digest --user=root –password=123456 --review h=localhost,D=test,t=query_review --create-review-table slow.log

 

8) 把查詢儲存到query_history表;

$ pt-query-digest --user=root –password=123456 --history  h=localhost,D=test,t=query_history --create-history-table slow.log

 

9) 透過tcpdump抓取mysql的tcp協議資料,然後再分析;

$ tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql_tcp.txt

$ pt-query-digest --type tcpdump mysql.tcp.txt > slow_report.log

 

10) 分析binlog;

$ mysqlbinlog mysql-bin.000001 > mysql-bin000001.sql

$ pt-query-digest --type=binlog mysql-bin000001.sql > slow_report.log

 

11) 分析general log;

$ pt-query-digest --type=genlog general.log > slow_report.log


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2637770/,如需轉載,請註明出處,否則將追究法律責任。

相關文章