Heim  >  Artikel  >  Datenbank  >  pt-query-digest (Percona Toolkit) wird angezeigt

pt-query-digest (Percona Toolkit) wird angezeigt

巴扎黑
巴扎黑Original
2017-06-23 11:05:281298Durchsuche
pt-query-digest kann MySQL-Abfrageinformationen über Protokolle, Prozesslisten und TCPdump analysieren. Die grundlegende Syntax lautet wie folgt:
pt-query-digest [OPTIONS] [FILES] [DSN]

pt-query-digest ist ein einfaches und benutzerfreundliches Tool zur Analyse von MySQL-Abfragen. Es kann MySQL-Slow-Log-, allgemeine LOG- und binäre Log-Abfragen analysieren. (Binärprotokolle müssen zunächst über das mysqlbinlog-Tool in Text konvertiert werden.) Es funktioniert auch mit SHOW PROCESSLIST und MySQL-Protokolldaten von tcpdump. Standardmäßig meldet das Tool, welche Abfrage am langsamsten ist, daher ist eine Optimierung am wichtigsten. Durch die Verwendung von Parametern wie --group-by, --filter und --embedded-attributes können individuellere Berichte erstellt werden.
pt-query-digest hat hauptsächlich die folgenden Funktionen:
(1) Verwenden Sie slow.log, um statistische Informationen zu generieren:
pt-query-digest slow.log

(2) Analysieren und generieren Sie Berichte aus der Prozessliste:
pt-query-digest --processlist h=host1

( 3) Analysieren Sie langsame Abfragen durch tcppdump-Paketerfassung:
tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt

(4) Analysieren Sie langsame Protokollabfragen an einen anderen Host:
pt-query-digest --review h=host2 --no-report slow.log

Werfen wir einen Blick auf die Hauptparameter:
--type ist standardmäßig slowlog, Parameter Der Wert kann auf binlog, genlog, slowlog, tcpdump, rawlog usw. eingestellt werden.
--processlist Analysieren Sie die vollständige Protokollabfrage von MySQL über Processlist.
--create-review-table Wenn Sie den Parameter --review zum Ausgeben der Analyseergebnisse in die Tabelle verwenden, wird dieser automatisch ausgeführt Wenn keine Tabelle vorhanden ist, erstellen Sie diese.
--create-history-table Wenn Sie den Parameter --history verwenden, um die Analyseergebnisse in einer Tabelle auszugeben, wird diese automatisch erstellt, wenn keine Tabelle vorhanden ist.
--filter gleicht die langsame Eingabeabfrage entsprechend der angegebenen Zeichenfolge ab und analysiert sie dann.
--limit begrenzt den Prozentsatz oder die Anzahl der Ausgabeergebnisse. Der Standardwert ist 20 ist die langsamste Die 20 Anweisungen werden ausgegeben. Wenn sie 50 % beträgt, werden sie entsprechend der Gesamtantwortzeit von groß nach klein sortiert und die Ausgabe wird abgeschnitten, wenn die Gesamtantwortzeit 50 % erreicht.
--host MySQL-Serveradresse
--user mysql username
--password mysql user passwort
--history Speichern Sie die Analyseergebnisse unter In In der Tabelle sind die Analyseergebnisse detaillierter, wenn Sie --history verwenden und sich das Zeitintervall der Abfrage von dem in der Verlaufstabelle unterscheidet kann dieselbe CHECKSUM abfragen. Historische Änderungen für einen bestimmten Abfragetyp vergleichen.
--review Speichern Sie die Analyseergebnisse in der Tabelle. Diese Analyse parametrisiert nur die Abfragebedingungen, was relativ einfach ist. Wenn --review das nächste Mal verwendet wird und dieselbe Aussageanalyse vorhanden ist, wird sie nicht in der Datentabelle aufgezeichnet.
--Ausgabetyp der Analyseergebnisse, der Wert kann Bericht (Standardanalysebericht), Slowlog (MySQL-langsames Protokoll), JSON, JSON-Anon sein. Verwenden Sie im Allgemeinen den Bericht, um das Lesen zu erleichtern.
--da der Zeitpunkt ist, ab dem die Analyse gestartet werden soll, ist der Wert eine Zeichenfolge, die ein angegebener Zeitpunkt im Format „jjjj-mm-tt [hh:mm:ss]“ oder sein kann Es kann sich um einen einfachen A-Zeitwert handeln: s (Sekunden), h (Stunden), m (Minuten), d (Tage). 12h bedeutet beispielsweise, dass die Zählung vor 12 Stunden begonnen hat.
--until Deadline, kombiniert mit --since kann langsame Abfragen innerhalb eines bestimmten Zeitraums analysieren.
Sehen wir uns die Informationen zum Standardausgabebericht an:
(1) Datenstatistik
# 2291.9s user time, 6.4s system time, 41.68M rss, 193.36M vsz
# Current date: Mon Jun 19 11:19:51 2017# Hostname: mxqmongodb2
# Files: /home/mysql/db3306/log/slowlog_343306.log
# Overall: 6.72M total, 140 unique, 16.12 QPS, 0.69x concurrency _________
# Time range: 2017-06-13T14:34:41 to 2017-06-18T10:22:04# Attribute total min max avg 95% stddev median
# ============ ======= ======= ======= ======= ======= ======= =======# Exec time 287519s 1us 20s 43ms 148ms 339ms 214us
# Lock time 151259s 0 20s 23ms 144us 319ms 47us
# Rows sent 5.40M 0 1000 0.84 0.99 6.58 0.99# Rows examine 388.33M 0 3.72k 60.59 5.75 388.16 0.99# Query size 692.26M 6 799 108.02 202.40 69.96 80.10

Das Obige enthält Informationen zum Hostnamen, zur Gesamtabfrage, zur eindeutigen Abfrage und zum Analysezeitraum. Der Attributteil ist derselbe wie der dritte Teil. Fügen Sie ihn in die beste Analyse ein
( 2 ) Langsame Abfrage statistischer SQL-Ergebnisse und Kostenstatistiken
# Profile
# Rank Query ID Response time Calls R/Call V/M Item
# ==== ================== ================= ======= ====== ===== =========# 1 0x255C57D761A899A9 146053.6926 50.8% 75972 1.9225 2.93 UPDATE warehouse
# 2 0x813031B8BBC3B329 94038.9621 32.7% 242741 0.3874 0.23 COMMIT
# 3 0xA0352AA54FDD5DF2 10125.5055 3.5% 75892 0.1334 0.43 UPDATE order_line
# 4 0xE5E8C12332AD11C5 5660.5113 2.0% 75977 0.0745 0.83 SELECT district
# 5 0xBD195A4F9D50914F 3634.6219 1.3% 757760 0.0048 1.01 SELECT stock
# 6 0xF078A9E73D7A8520 3431.3527 1.2% 75874 0.0452 0.81 UPDATE district
# 7 0x9577D48F480A1260 2307.4342 0.8% 50255 0.0459 1.25 SELECT customer
# 8 0xFFDA79BA14F0A223 2158.4731 0.8% 75977 0.0284 0.54 SELECT customer warehouse
# 9 0x5E61FF668A8E8456 1838.4440 0.6% 1507614 0.0012 0.74 SELECT stock
# 10 0x10BEBFE721A275F6 1671.8274 0.6% 757751 0.0022 0.52 INSERT order_line
# 11 0x8B2716B5B486F6AA 1658.5984 0.6% 75871 0.0219 0.75 INSERT history
# 12 0xBF40A4C7016F2BAE 1504.7939 0.5% 758569 0.0020 0.77 SELECT item
# 13 0x37AEB73B59EFC119 1470.5951 0.5% 2838 0.5182 0.27 INSERT SELECT tpcc._stock_new tpcc.stock
# 15 0x26C4F579BF19956D 1030.4416 0.4% 1982 0.5199 0.28 INSERT SELECT tpcc.__stock_new tpcc.stock
# 22 0xD80B7970DBF2419C 493.0831 0.2% 947 0.5207 0.28 INSERT SELECT tpcc.__stock_new tpcc.stock
# 23 0xDE7EA4E363CAD006 488.2134 0.2% 943 0.5177 0.25 INSERT SELECT tpcc.__stock_new tpcc.stock
# 25 0x985B012461683472 470.6418 0.2% 907 0.5189 0.25 INSERT SELECT tpcc.__stock_new tpcc.stock
# MISC 0xMISC 9482.0467 3.3% 2182254 0.0043 0.0 <123 ITEMS>

Die Informationen umfassen Antwort: Gesamtantwortzeit, Zeit: die Abfrage die Gesamtzeit, die für diese Analyse aufgewendet wurde. Aufrufe: Die Anzahl der Ausführungen, also die Gesamtzahl der Abfrageanweisungen dieses Typs in dieser Analyse. R/Call: Durchschnittliche Antwortzeit pro Ausführung. Artikel: SQL-Operationstabelle.
(3) Der dritte Teil, die detaillierten Informationen zu jedem SQL
# Query 1: 1.14 QPS, 2.19x concurrency, ID 0x255C57D761A899A9 at byte 1782619576# This item is included in the report because it matches --limit.
# Scores: V/M = 2.93# Time range: 2017-06-13T14:34:42 to 2017-06-14T09:05:56# Attribute pct total min max avg 95% stddev median
# ============ === ======= ======= ======= ======= ======= ======= =======# Count 1 75972# Exec time 50 146054s 160us 20s 2s 7s 2s 1s
# Lock time 94 142872s 39us 20s 2s 7s 2s 992ms
# Rows sent 0 0 0 0 0 0 0 0# Rows examine 0 74.19k 1 1 1 1 0 1# Query size 0 4.05M 53 57 55.88 56.92 0.82 54.21# String:
# Hosts 127.0.0.1# Users root
# Query_time distribution
# 1us
# 10us
# 100us ######################
# 1ms ##
# 10ms ###
# 100ms ##################################
# 1s ################################################################
# 10s+ ##
# Tables
# SHOW TABLE STATUS LIKE 'warehouse'\G
# SHOW CREATE TABLE `warehouse`\G
UPDATE warehouse SET w_ytd = w_ytd + 3651 WHERE w_id = 4\G
# Converted for EXPLAIN
# EXPLAIN /*!50100 PARTITIONS*/select w_ytd = w_ytd + 3651 from warehouse where w_id = 4\G

Abfrage 1, das Ist die oberste Abfrage in Bezug auf die Kosten, die erste Zeile enthält die Spaltenüberschriften der Tabelle. „Prozent“ ist der Prozentsatz der Gesamtsumme für den gesamten Analyselauf und „Gesamt“ ist der tatsächliche Wert der angegebenen Metrik. In diesem Fall können wir beispielsweise sehen, dass die Abfrage 75972 Mal ausgeführt wurde, was 50 % aller Abfragen in der Datei entspricht. Die Spalten „Min“, „Max“ und „Durchschnitt“ sind selbsterklärend. Die Spalte „95. Perzentil“ zeigt das 95. Perzentil; 95 % der Werte sind kleiner oder gleich diesem Wert. Die Standardabweichung gibt an, wie eng die Werte beieinander gruppiert sind. Die Standardabweichung und der Median werden aus dem 95. Perzentil berechnet, wobei die größten und kleinsten Werte verworfen werden.
Werfen wir einen Blick auf die reguläre Verwendung:
1: Langsame Protokolle analysieren
Standardbericht
[root@mxqmongodb2 bin]# ./pt-query-digest /home/mysql/db3306/log/slowlog_343306.log >/home/sa/slowlog_343306.log

Teilen Sie es nach der Zeit auf:
[root@mxqmongodb2 bin]# ./pt-query-digest --since=24h /home/mysql/db3306/log/slowlog_343306.log >/home/sa/slowlog_343306_24.log

而且我们可以设置过滤条天通过--filter参数,更好生成我们想要的报表。
例如只查询select:--filter '$event->{arg} =~ m/^select/i',只查询某个用户:--filter '($event->{user} || "") =~ m/^dba/i' ,全表扫描等:--filter '(($event->{Full_scan} || "") eq "yes") ||(($event->{Full_join} || "") eq "yes")' 
2:保存分析结果到表文件:
[root@mxqmongodb2 bin]# ./pt-query-digest --user=root --password=123456 --port=3306 --review h=172.16.16.35,D=test,t=query_report /home/mysql/db3306/log/slowlog_343306.log

 

看一下结果样式
mysql> select * from query_report limit 1\G*************************** 1. row ***************************checksum: 1206612749604517366fingerprint: insert into order_line (ol_o_id, ol_d_id, ol_w_id, ol_number, ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_dist_info) values(?+)
sample: INSERT INTO order_line (ol_o_id, ol_d_id, ol_w_id, ol_number, ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_dist_info) VALUES (3730, 6, 10, 1, 6657, 10, 8, 62.41910171508789, 'N3F5fAhga7U51tlXr8AEgZdi')
first_seen: 2017-06-13 14:34:42last_seen: 2017-06-14 09:05:54reviewed_by: NULL
reviewed_on: NULL
comments: NULL1 row in set (0.00 sec)

 

3:分析binlog(要先使用mysqlbinlog将binlog转换)
[root@mxqmongodb2 log]# mysqlbinlog mysql-bin.000012 >/home/sa/mysql-bin_000012.log
[root@mxqmongodb2 bin]# ./pt-query-digest --type=binlog /home/sa/mysql-bin_000012.log >/home/sa/mysql-bin_000012_report.log

 

这个测试的时候还是有点小迷茫的,因为打印的结果并不是我要的,难道是因为我的binlog格式是ROW?保留下来,后面在测试。
4:分析general log
加上--type=genlog 即可,没有验证。。。。。。
5:tcpdump抓包分析
我们先要开启压力测试:
[root@mxqmongodb2 tpcc-mysql]# ./tpcc_start -h127.0.0.1 -P3306 -d tpcc -u root -p123456 -w 10 -c 10 -r 10 -l 3000

 

连续测试三十分钟,提供我们的抓取数据:
[root@mxqmongodb2 log]# tcpdump -s 65535 -x -nn -q -tttt -i any -c 10000 port 3306 >/home/sa/mysql.tcp.txt
[root@mxqmongodb2 bin]# ./pt-query-digest --type=tcpdump /home/sa/mysql.tcp.txt >/home/sa/mysql.tcp_repot.txt

 

看一下效果:
[root@mxqmongodb2 sa]# cat mysql.tcp_repot.txt
 
# 4.2s user time, 50ms system time, 27.65M rss, 179.15M vsz
# Current date: Tue Jun 20 17:08:40 2017# Hostname: mxqmongodb2
# Files: /home/sa/mysql.tcp.txt
# Overall: 155 total, 3 unique, 9.76 QPS, 4.52x concurrency ______________
# Time range: 2017-06-20 17:06:19.850032 to 17:06:35.731291# Attribute total min max avg 95% stddev median
# ============ ======= ======= ======= ======= ======= ======= =======# Exec time 72s 63us 2s 463ms 1s 352ms 393ms
# Rows affecte 25 0 15 0.16 0.99 1.18 0# Query size 956 6 30 6.17 5.75 1.85 5.75# Warning coun 1 0 1 0.01 0 0.08 0
 # Profile
# Rank Query ID Response time Calls R/Call V/M Item
# ==== ================== ============= ===== ====== ===== =========# 1 0x813031B8BBC3B329 69.9077 97.4% 153 0.4569 0.25 COMMIT
# MISC 0xMISC 1.8904 2.6% 2 0.9452 0.0 <2 ITEMS>
 # Query 1: 9.63 QPS, 4.40x concurrency, ID 0x813031B8BBC3B329 at byte 10100332# This item is included in the report because it matches --limit.
# Scores: V/M = 0.25# Time range: 2017-06-20 17:06:19.850032 to 17:06:35.731291# Attribute pct total min max avg 95% stddev median
# ============ === ======= ======= ======= ======= ======= ======= =======# Count 98 153# Exec time 97 70s 63us 2s 457ms 1s 336ms 393ms
# Rows affecte 100 25 0 15 0.16 0.99 1.19 0# Query size 96 918 6 6 6 6 0 6# Warning coun 100 1 0 1 0.01 0 0.08 0# String:
# Hosts 127.0.0.1# Query_time distribution
# 1us
# 10us #
# 100us ####
# 1ms #
# 10ms #
# 100ms ################################################################
# 1s ##########
# 10s+commit\G

 

Das obige ist der detaillierte Inhalt vonpt-query-digest (Percona Toolkit) wird angezeigt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn