這篇文章主要介紹了關(guān)于mysql慢查詢之pt-query-digest分析慢查詢?nèi)罩镜南嚓P(guān)資料,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
一、mysql
pt-query-digest是用于分析mysql慢查詢的一個工具,它可以分析binlog、General log、slowlog,也可以通過SHOWPROCESSLIST或者通過tcpdump抓取的MySQL協(xié)議數(shù)據(jù)來進行分析。可以把分析結(jié)果輸出到文件中,分析過程是先對查詢語句的條件進行參數(shù)化,然后對參數(shù)化以后的查詢進行分組統(tǒng)計,統(tǒng)計出各查詢的執(zhí)行時間、次數(shù)、占比等,可以借助分析結(jié)果找出問題進行優(yōu)化。
二、mysqlpt-query-digest
2.perl的模塊
yum?install?-y?perl-CPAN?perl-Time-HiRes
3.安裝步驟
方法一:rpm安裝
cd?/usr/local/src wget?percona.com/get/percona-toolkit.rpm yum?install?-y?percona-toolkit.rpm
工具安裝目錄在:/usr/bin
方法二:源碼安裝
cd?/usr/local/src wget?percona.com/get/percona-toolkit.tar.gz tar?zxf?percona-toolkit.tar.gz cd?percona-toolkit-2.2.19 perl?Makefile.PL?PREFIX=/usr/local/percona-toolkit make?&&?make?install
工具安裝目錄在:/usr/local/percona-toolkit/bin
4.各工具用法簡介
(1)慢查詢?nèi)罩痉治鼋y(tǒng)計
pt-query-digest?/usr/local/mysql/data/slow.log
(2)服務(wù)器摘要
pt-summary
(3)服務(wù)器磁盤監(jiān)測
pt-diskstats
(4)mysql服務(wù)狀態(tài)摘要
pt-mysql-summary?--?--user=root?--password=root
三、pt-query-digest語法及重要選項
-
pt-query-digest [OPTIONS] [FILES] [DSN]
-
–create-review-table? 當使用–review參數(shù)把分析結(jié)果輸出到表中時,如果沒有表就自動創(chuàng)建。
-
–create-history-table? 當使用–history參數(shù)把分析結(jié)果輸出到表中時,如果沒有表就自動創(chuàng)建。
-
–filter? 對輸入的慢查詢按指定的mysql進行匹配過濾后再進行分析
-
–limit??? 限制輸出結(jié)果百分比或數(shù)量,默認值是20,即將最慢的20條語句輸出,如果是50%則按總響應(yīng)時間占比從大到小排序,輸出到總和達到50%位置截止。
-
–host? mysql服務(wù)器地址
-
–user? mysql用戶名
-
–password? mysql用戶密碼
-
–history 將分析結(jié)果保存到表中,分析結(jié)果比較詳細,下次再使用–history時,如果存在相同的語句,且查詢所在的時間區(qū)間和歷史表中的不同,則會記錄到數(shù)據(jù)表中,可以通過查詢同一CHECKSUM來比較某類型查詢的歷史變化。
-
–review 將分析結(jié)果保存到表中,這個分析只是對查詢條件進行參數(shù)化,一個類型的查詢一條記錄,比較簡單。當下次使用–review時,如果存在相同的語句分析,就不會記錄到數(shù)據(jù)表中。
-
–output 分析結(jié)果輸出類型,值可以是report(標準分析報告)、slowlog(Mysql slow log)、mysql、json-anon,一般使用report,以便于閱讀。
-
–since 從什么時間開始分析,值為字符串,可以是指定的某個”yyyy-mm-dd [hh:mm:ss]”格式的時間點,也可以是簡單的一個時間值:s(秒)、h(小時)、m(分鐘)、d(天),如12h就表示從12小時前開始統(tǒng)計。
-
–until 截止時間,配合—since可以分析一段時間內(nèi)的慢查詢。
四、分析pt-query-digest輸出結(jié)果
第一部分:總體統(tǒng)計結(jié)果
Overall:總共有多少條查詢
Time range:查詢執(zhí)行的時間范圍
unique:唯一查詢數(shù)量,即對查詢條件進行參數(shù)化以后,總共有多少個不同的查詢
total:總計?? min:最小?? max:最大? avg:平均
95%:把所有值從小到大排列,位置位于95%的那個數(shù),這個數(shù)一般最具有參考價值
median:中位數(shù),把所有值從小到大排列,位置位于中間那個數(shù)
#?該工具執(zhí)行日志分析的用戶時間,系統(tǒng)時間,物理內(nèi)存占用大小,虛擬內(nèi)存占用大小 #?340ms?user?time,?140ms?system?time,?23.99M?rss,?203.11M?vsz #?工具執(zhí)行時間 #?Current?date:?Fri?Nov?25?02:37:18?2016 #?運行分析工具的主機名 #?Hostname:?localhost.localdomain #?被分析的文件名 #?Files:?slow.log #?語句總數(shù)量,唯一的語句數(shù)量,QPS,并發(fā)數(shù) #?Overall:?2?total,?2?unique,?0.01?QPS,?0.01x?concurrency? #?日志記錄的時間范圍 #?Time?range:?2016-11-22?06:06:18?to?06:11:40 #?屬性????總計??最小?最大?平均?95%?標準?中等 #?Attribute???total??min??max??avg??95%?stddev?median #?============??=======?=======?=======?=======?=======?=======?======= #?語句執(zhí)行時間 #?Exec?time????3s?640ms??2s??1s??2s?999ms??1s #?鎖占用時間 #?Lock?time???1ms??0??1ms?723us??1ms??1ms?723us #?發(fā)送到客戶端的行數(shù) #?Rows?sent????5??1??4?2.50??4?2.12?2.50 #?select語句掃描行數(shù) #?Rows?examine??186.17k??0?186.17k?93.09k?186.17k?131.64k?93.09k #?查詢的字符數(shù) #?Query?size???455??15??440?227.50??440?300.52?227.50
第二部分:查詢分組統(tǒng)計結(jié)果
Rank:所有語句的排名,默認按查詢時間降序排列,通過–order-by指定
Query ID:語句的ID,(去掉多余空格和文本字符,計算mysql值)
Response:總的響應(yīng)時間
time:該查詢在本次分析中總的時間占比
calls:執(zhí)行次數(shù),即本次分析總共有多少條這種類型的查詢語句
R/Call:平均每次執(zhí)行的響應(yīng)時間
V/M:響應(yīng)時間Variance-to-mean的比率
Item:查詢mysql
#?Profile #?Rank?Query?ID???Response?time?Calls?R/Call?V/M?Item #?====?==================?=============?=====?======?=====?=============== #?1?0xF9A57DD5A41825CA?2.0529?76.2%??1?2.0529?0.00?SELECT #?2?0x4194D8F83F4F9365?0.6401?23.8%??1?0.6401?0.00?SELECT?wx_member_base
第三部分:每一種查詢的詳細統(tǒng)計結(jié)果
由下面查詢的詳細統(tǒng)計結(jié)果,最上面的mysql列出了執(zhí)行次數(shù)、最大、最小、平均、95%等各項目的統(tǒng)計。
ID:查詢的ID號,和上圖的Query ID對應(yīng)
Databases:數(shù)據(jù)庫名
Users:各個用戶執(zhí)行的次數(shù)(占比)
Query_time distribution :查詢時間分布, 長短體現(xiàn)區(qū)間占比,本例中1s-10s之間查詢數(shù)量是10s以上的兩倍。
Tables:查詢中涉及到的表
Explain:SQL語句
#?Query?1:?0?QPS,?0x?concurrency,?ID?0xF9A57DD5A41825CA?at?byte?802? #?This?item?is?included?in?the?report?because?it?matches?--limit. #?Scores:?V/M?=?0.00 #?Time?range:?all?events?occurred?at?2016-11-22?06:11:40 #?Attribute?pct?total??min??max??avg??95%?stddev?median #?============?===?=======?=======?=======?=======?=======?=======?======= #?Count???50??1 #?Exec?time??76??2s??2s??2s??2s??2s??0??2s #?Lock?time??0??0??0??0??0??0??0??0 #?Rows?sent??20??1??1??1??1??1??0??1 #?Rows?examine?0??0??0??0??0??0??0??0 #?Query?size??3??15??15??15??15??15??0??15 #?String: #?Databases?test #?Hosts??192.168.8.1 #?Users??mysql #?Query_time?distribution #?1us #?10us #?100us #?1ms #?10ms #?100ms #?1s?################################################################ #?10s+ #?EXPLAIN?/*!50100?PARTITIONS*/ select?sleep(2)G
五、用法示例
1.直接分析慢查詢文件:
pt-query-digest?slow.log?>?slow_report.log
2.分析最近12小時內(nèi)的查詢:
pt-query-digest?--since=12h?slow.log?>?slow_report2.log
3.分析指定時間范圍內(nèi)的查詢:
pt-query-digest?slow.log?--since?'2017-01-07?09:30:00'?--until?'2017-01-07?10:00:00'>?>?slow_report3.log
4.分析指含有select語句的慢查詢
pt-query-digest?--filter?'$event->{fingerprint}?=~?m/^select/i'?slow.log>?slow_report4.log
5.針對某個用戶的慢查詢
pt-query-digest?--filter?'($event->{user}?||?"")?=~?m/^root/i'?slow.log>?slow_report5.log
6.查詢所有所有的全表掃描或full join的慢查詢
pt-query-digest?--filter?'(($event->{Full_scan}?||?"")?eq?"yes")?||(($event->{Full_join}?||?"")?eq?"yes")'?slow.log>?slow_report6.log
7.把查詢保存到query_review表
pt-query-digest?--user=root?–password=abc123?--review?h=localhost,D=test,t=query_review--create-review-table?slow.log
8.把查詢保存到query_history表
pt-query-digest?--user=root?–password=abc123?--review?h=localhost,D=test,t=query_history--create-review-table?slow.log_0001 pt-query-digest?--user=root?–password=abc123?--review?h=localhost,D=test,t=query_history--create-review-table?slow.log_0002
9.通過tcpdump抓取mysql的tcp協(xié)議數(shù)據(jù),然后再分析
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_report9.log
10.分析binlog
mysqlbinlog?mysql-bin.000093?>?mysql-bin000093.sql pt-query-digest?--type=binlog?mysql-bin000093.sql?>?slow_report10.log
11.分析general log
pt-query-digest?--type=genlog?localhost.log?>?slow_report11.log
總結(jié)