MySQL之pt-query-digest分析慢查詢?nèi)罩镜脑斍榻榻B

這篇文章主要介紹了關(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語法及重要選項

  1. pt-query-digest [OPTIONS] [FILES] [DSN]

  2. –create-review-table? 當使用–review參數(shù)把分析結(jié)果輸出到表中時,如果沒有表就自動創(chuàng)建。

  3. –create-history-table? 當使用–history參數(shù)把分析結(jié)果輸出到表中時,如果沒有表就自動創(chuàng)建。

  4. –filter? 對輸入的慢查詢按指定的mysql進行匹配過濾后再進行分析

  5. –limit??? 限制輸出結(jié)果百分比或數(shù)量,默認值是20,即將最慢的20條語句輸出,如果是50%則按總響應(yīng)時間占比從大到小排序,輸出到總和達到50%位置截止。

  6. –host? mysql服務(wù)器地址

  7. –user? mysql用戶名

  8. –password? mysql用戶密碼

  9. –history 將分析結(jié)果保存到表中,分析結(jié)果比較詳細,下次再使用–history時,如果存在相同的語句,且查詢所在的時間區(qū)間和歷史表中的不同,則會記錄到數(shù)據(jù)表中,可以通過查詢同一CHECKSUM來比較某類型查詢的歷史變化。

  10. –review 將分析結(jié)果保存到表中,這個分析只是對查詢條件進行參數(shù)化,一個類型的查詢一條記錄,比較簡單。當下次使用–review時,如果存在相同的語句分析,就不會記錄到數(shù)據(jù)表中。

  11. –output 分析結(jié)果輸出類型,值可以是report(標準分析報告)、slowlog(Mysql slow log)、mysql、json-anon,一般使用report,以便于閱讀。

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

  13. –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é)

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊15 分享