共計 6108 個字符,預計需要花費 16 分鐘才能閱讀完成。
這篇文章主要介紹 mysql 中 pt-query-digest 如何安裝使用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
pt-query-digest 安裝使用
一、簡介
pt-query-digest 是用于分析 mysql 慢查詢的一個工具,它可以分析 binlog、General log、slowlog,也可以通過 SHOWPROCESSLIST 或者通過 tcpdump 抓取的 MySQL 協議數據來進行分析。可以把分析結果輸出到文件中,分析過程是先對查詢語句的條件進行參數化,然后對參數化以后的查詢進行分組統計,統計出各查詢的執行時間、次數、占比等,可以借助分析結果找出問題進行優化。
二、安裝 pt-query-digest
1. 下載頁面:
https://www.percona.com/doc/percona-toolkit/3.0/installation.html
2. 配置 yum 庫
Configuring Percona Repository
Enabling Testing and Experimental Repositories
yum install
http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
3.yum 方式安裝
yum install percona-toolkit
默認安裝到:/usr/bin
[root@tqsrv122 yum]# ls /usr/bin/pt-*
/usr/bin/pt-align /usr/bin/pt-ioprofile /usr/bin/pt-slave-delay
/usr/bin/pt-archiver /usr/bin/pt-kill /usr/bin/pt-slave-find
/usr/bin/pt-config-diff /usr/bin/pt-mext /usr/bin/pt-slave-restart
/usr/bin/pt-deadlock-logger /usr/bin/pt-mongodb-query-digest /usr/bin/pt-stalk
/usr/bin/pt-diskstats /usr/bin/pt-mongodb-summary /usr/bin/pt-summary
/usr/bin/pt-duplicate-key-checker /usr/bin/pt-mysql-summary /usr/bin/pt-table-checksum
/usr/bin/pt-fifo-split /usr/bin/pt-online-schema-change /usr/bin/pt-table-sync
/usr/bin/pt-find /usr/bin/pt-pmp /usr/bin/pt-table-usage
/usr/bin/pt-fingerprint /usr/bin/pt-query-digest /usr/bin/pt-upgrade
/usr/bin/pt-fk-error-logger /usr/bin/pt-secure-collect /usr/bin/pt-variable-advisor
/usr/bin/pt-heartbeat /usr/bin/pt-show-grants /usr/bin/pt-visual-explain
/usr/bin/pt-index-usage /usr/bin/pt-sift
4. 各工具用法簡介(詳細內容:https://www.percona.com/doc/percona-toolkit/3.0/index.html)
(1) 慢查詢日志分析統計
pt-query-digest /usr/local/mysql/data/slow.log
(2) 服務器摘要
pt-summary
(3) 服務器磁盤監測
pt-diskstats
(4)mysql 服務狀態摘要
pt-mysql-summary — –user=root –password=root
三、pt-query-digest 語法及重要選項
pt-query-digest [OPTIONS] [FILES] [DSN]
–create-review-table
當使用 –review 參數把分析結果輸出到表中時,如果沒有表就自動創建。
–create-history-table
當使用 –history 參數把分析結果輸出到表中時,如果沒有表就自動創建。
–filter
對輸入的慢查詢按指定的字符串進行匹配過濾后再進行分析
–limit
限制輸出結果百分比或數量,默認值是 20, 即將最慢的 20 條語句輸出,如果是 50% 則按總響應時間占比從大到小排序,輸出到總和達到 50% 位置截止。
–host mysql 服務器地址
–user mysql 用戶名
–password mysql 用戶密碼
–history
將分析結果保存到表中,分析結果比較詳細,下次再使用 –history 時,如果存在相同的語句,且查詢所在的時間區間和歷史表中的不同,則會記錄到數據表中,可以通過查詢同一 CHECKSUM 來比較某類型查詢的歷史變化。
–review
將分析結果保存到表中,這個分析只是對查詢條件進行參數化,一個類型的查詢一條記錄,比較簡單。當下次使用 –review 時,如果存在相同的語句分析,就不會記錄到數據表中。
–output
分析結果輸出類型,值可以是 report(標準分析報告)、slowlog(Mysql slow log)、json、json-anon,一般使用 report,以便于閱讀。
–since
從什么時間開始分析,值為字符串,可以是指定的某個”yyyy-mm-dd [hh:mm:ss]”格式的時間點,也可以是簡單的一個時間值:s(秒)、h(小時)、m(分鐘)、d(天),如 12h 就表示從 12 小時前開始統計。
–until
截止時間,配合—since 可以分析一段時間內的慢查詢。
四、分析 pt-query-digest 輸出結果
第一部分:總體統計結果
Overall:總共有多少條查詢
Time range:查詢執行的時間范圍
unique:唯一查詢數量,即對查詢條件進行參數化以后,總共有多少個不同的查詢
total:總計 min:最小 max:最大 avg:平均
95%:把所有值從小到大排列,位置位于 95% 的那個數,這個數一般最具有參考價值
median:中位數,把所有值從小到大排列,位置位于中間那個數
#
該工具執行日志分析的用戶時間,系統時間,物理內存占用大小,虛擬內存占用大小
# 340ms user time, 140ms system time, 23.99M rss, 203.11M vsz
#
工具執行時間
# Current date: Fri Nov 25 02:37:18 2016
#
運行分析工具的主機名
# Hostname: localhost.localdomain
#
被分析的文件名
# Files: slow.log
#
語句總數量,唯一的語句數量,QPS,并發數
# 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
# ============ ======= ======= ======= ======= ======= ======= =======
#
語句執行時間
# Exec time 3s 640ms 2s 1s 2s 999ms 1s
#
鎖占用時間
# Lock time 1ms 0 1ms 723us 1ms 1ms 723us
#
發送到客戶端的行數
# Rows sent 5 1 4 2.50 4 2.12 2.50
# select 語句掃描行數
# Rows examine 186.17k 0 186.17k 93.09k 186.17k 131.64k 93.09k
#
查詢的字符數
# Query size 455 15 440 227.50 440 300.52 227.50
第二部分:查詢分組統計結果
Rank:所有語句的排名,默認按查詢時間降序排列,通過 –order-by 指定
Query ID:語句的 ID,(去掉多余空格和文本字符,計算 hash 值)
Response:總的響應時間
time:該查詢在本次分析中總的時間占比
calls:執行次數,即本次分析總共有多少條這種類型的查詢語句
R/Call:平均每次執行的響應時間
V/M:響應時間 Variance-to-mean 的比率
Item:查詢對象
# Profile
# Rank Query ID Response time Calls R/Call V/M Item
# ==== ================== ============= ===== ====== ===== ===============
#
1 0xF9A57DD5A41825CA
2.0529 76.2%
1 2.0529
SELECT
#
2 0x4194D8F83F4F9365
0.6401 23.8%
1 0.6401
SELECT wx_member_base
第三部分:每一種查詢的詳細統計結果
由下面查詢的詳細統計結果,最上面的表格列出了執行次數、最大、最小、平均、95% 等各項目的統計。
ID:查詢的 ID 號,和上圖的 Query ID 對應
Databases:數據庫名
Users:各個用戶執行的次數(占比)
Query_time distribution
:查詢時間分布,
長短體現區間占比,本例中 1s-10s 之間查詢數量是 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 小時內的查詢:
pt-query-digest –since=12h slow.log slow_report2.log
3. 分析指定時間范圍內的查詢:
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 協議數據,然后再分析
tcpdump -s
65535
-x -nn -q -tttt -i any -c
port
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
以上是“mysql 中 pt-query-digest 如何安裝使用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!