MySQL-langsame Abfrage pt-query-digest Analyse des langsamen Abfrageprotokolls

MySQL-langsame Abfrage pt-query-digest Analyse des langsamen Abfrageprotokolls

1. Einleitung

pt-query-digest ist ein Tool zum Analysieren langsamer MySQL-Abfragen. Es kann Binlog-, allgemeine Log-, Slowlog- oder MySQL-Protokolldaten analysieren, die von SHOWPROCESSLIST oder tcpdump erfasst wurden. Die Analyseergebnisse können in eine Datei ausgegeben werden. Der Analyseprozess besteht darin, zunächst die Bedingungen der Abfrageanweisung zu parametrisieren, dann die parametrisierten Abfragen zu gruppieren und zu zählen und die Ausführungszeit, Häufigkeit, Anteil usw. jeder Abfrage zu berechnen. Die Analyseergebnisse können verwendet werden, um Probleme zu identifizieren und zu optimieren.

2. Installieren Sie pt-query-digest

1. Download-Seite: https://www.percona.com/doc/percona-toolkit/2.2/installation.html

2. Perl-Module

yum install -y perl-CPAN perl-Time-HiRes

3. Installationsschritte

Methode 1: RPM-Installation

cd /usr/local/src
wget percona.com/get/percona-toolkit.rpm
yum install -y percona-toolkit.rpm

Das Installationsverzeichnis des Tools lautet: /usr/bin

Methode 2: Quellcode-Installation

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
machen && machen installieren

Das Installationsverzeichnis des Tools ist: /usr/local/percona-toolkit/bin

4. Einführung in die Verwendung jedes Tools (Details: https://www.percona.com/doc/percona-toolkit/2.2/index.html)

(1) Analyse und Statistik des langsamen Abfrageprotokolls

pt-query-digest /usr/local/mysql/data/slow.log

(2) Serverübersicht

pt-Zusammenfassung

(3) Server-Festplattenüberwachung

pt-diskstats

(4)Zusammenfassung des MySQL-Dienststatus

pt-mysql-summary -- --user=root --password=root

pt-query-digest-Syntax und wichtige Optionen

  1. pt-query-digest [OPTIONEN] [DATEIEN] [DSN]
  2. --create-review-table Wenn der Parameter --review verwendet wird, um die Analyseergebnisse in eine Tabelle auszugeben, wird diese automatisch erstellt, falls sie nicht existiert.
  3. --create-history-table Wenn der Parameter --history verwendet wird, um die Analyseergebnisse in eine Tabelle auszugeben, wird diese automatisch erstellt, wenn die Tabelle nicht existiert.
  4. --filter gleicht die langsame Eingabeabfrage ab und filtert sie entsprechend der angegebenen Zeichenfolge, bevor sie analysiert wird.
  5. --limit begrenzt den Prozentsatz oder die Anzahl der Ausgabeergebnisse. Der Standardwert ist 20, was bedeutet, dass die 20 langsamsten Anweisungen ausgegeben werden. Wenn es 50 % sind, werden sie entsprechend dem Anteil an der gesamten Antwortzeit von groß nach klein sortiert, und die Ausgabe endet, wenn die Summe 50 % erreicht.
  6. --host MySQL-Serveradresse
  7. --user mysql-Benutzername
  8. --password MySQL-Benutzerkennwort
  9. --history speichert die Analyseergebnisse in der Tabelle. Die Analyseergebnisse sind relativ detailliert. Wenn beim nächsten Verwenden von --history dieselbe Anweisung vorhanden ist und das Zeitintervall der Abfrage von dem in der Verlaufstabelle abweicht, wird dies in der Datentabelle aufgezeichnet. Sie können die historischen Änderungen eines bestimmten Abfragetyps vergleichen, indem Sie dieselbe PRÜFSUMME abfragen.
  10. --review speichert die Analyseergebnisse in der Tabelle. Diese Analyse parametrisiert lediglich die Abfragebedingungen, ein Datensatz für einen Abfragetyp, was relativ einfach ist. Wenn Sie --review das nächste Mal verwenden, wird die gleiche Anweisungsanalyse, falls sie bereits vorhanden ist, nicht in der Datentabelle aufgezeichnet.
  11. --output Der Ausgabetyp der Analyseergebnisse. Die Werte können report (Standardanalysebericht), slowlog (MySQL Slow Log), json oder json-anon sein. Report wird im Allgemeinen zur leichteren Lesbarkeit verwendet.
  12. --since Der Zeitpunkt, zu dem die Analyse gestartet werden soll. Der Wert ist eine Zeichenfolge. Es kann sich um einen angegebenen Zeitpunkt im Format „yyyy-mm-dd [hh:mm:ss]“ oder einen einfachen Zeitwert handeln: s (Sekunden), h (Stunden), m (Minuten), d (Tage). Beispielsweise bedeutet 12h, dass die Statistiken vor 12 Stunden beginnen.
  13. --until deadline kann in Kombination mit --since langsame Abfragen über einen bestimmten Zeitraum analysieren.

4. Analysieren Sie die Ausgabeergebnisse von pt-query-digest

Teil I: Statistische Gesamtergebnisse

Gesamt: Wie viele Anfragen gibt es insgesamt

Zeitbereich: Der Zeitbereich für die Abfrageausführung

unique: die Anzahl eindeutiger Abfragen, also die Gesamtzahl unterschiedlicher Abfragen nach Parametrisierung der Abfragebedingungen

total: Gesamt min: Minimum max: Maximum avg: Durchschnitt

95 %: Ordnen Sie alle Werte von klein nach groß an. Die Zahl bei 95 % ist im Allgemeinen als Referenz am wertvollsten.

Median: Median, ordnen Sie alle Werte von klein nach groß an, die Position liegt in der Mitte

# Das Tool führt eine Protokollanalyse der Benutzerzeit, Systemzeit, physischen Speichernutzung und virtuellen Speichernutzung durch. # 340 ms Benutzerzeit, 140 ms Systemzeit, 23,99 M RSS, 203,11 M VSZ
# Tool-Ausführungszeit# Aktuelles Datum: Fr., 25. Nov. 2016, 02:37:18
# Hostname, auf dem das Analysetool ausgeführt wird# Hostname: localhost.localdomain
# Dateien: slow.log
# Insgesamt: 2 insgesamt, 2 einzigartig, 0,01 QPS, 0,01-fache Parallelität ________________
# Zeitraum für die Protokollierung # Zeitraum: 22.11.2016 06:06:18 bis 06:11:40
# Attribut Gesamt Min Max Durchschnitt 95% Standardabweichung Median
# ============ ======= ======= ======= ======= ======= ======= =======
# Anweisungsausführungszeit# Ausführungszeit 3s 640ms 2s 1s 2s 999ms 1s
# Sperrzeit # Sperrzeit 1ms 0 1ms 723us 1ms 1ms 723us
# Anzahl der an den Client gesendeten Zeilen # Gesendete Zeilen 5 1 4 2,50 4 2,12 2,50
# Select-Anweisung durchsucht Zeilen # Zeilen untersuchen 186,17k 0 186,17k 93,09k 186,17k 131,64k 93,09k
# Anzahl der Zeichen in der Abfrage# Abfragegröße 455 15 440 227,50 440 300,52 227,50

Teil 2: Ergebnisse der Abfragegruppenstatistik

Rang: Die Rangfolge aller Anweisungen, standardmäßig nach Abfragezeit in absteigender Reihenfolge sortiert, angegeben durch --order-by

Abfrage-ID: Anweisungs-ID (überschüssige Leerzeichen und Textzeichen entfernen und den Hash-Wert berechnen)

Antwort: Gesamtantwortzeit

Zeit: Der Gesamtzeitanteil dieser Abfrage in dieser Analyse

Aufrufe: die Anzahl der Ausführungen, d. h. wie viele Abfrageanweisungen dieses Typs gibt es in dieser Analyse

R/Call: durchschnittliche Antwortzeit pro Ausführung

V/M: Verhältnis der Antwortzeitvariabilität zum Mittelwert

Artikel: Abfrageobjekt

# Profil
# Rang Abfrage-ID Antwortzeit Anrufe R/Anruf V/M Artikel
# ==== ===================== ============= ====== ====== =================
# 1 0xF9A57DD5A41825CA 2,0529 76,2 % 1 2,0529 0,00 AUSWÄHLEN
# 2 0x4194D8F83F4F9365 0,6401 23,8 % 1 0,6401 0,00 AUSWÄHLEN wx_member_base

Teil 3: Detaillierte Statistiken für jede Abfrage

Aus den detaillierten statistischen Ergebnissen der Abfrage weiter unten werden in der oberen Tabelle die Statistiken jedes Elements aufgelistet, wie z. B. Ausführungsnummer, Maximum, Minimum, Durchschnitt, 95 % usw.

ID: Die Abfrage-ID-Nummer, die der Abfrage-ID in der obigen Abbildung entspricht

Datenbanken: Datenbankname

Benutzer: Die Anzahl der Ausführungen jedes Benutzers (in Prozent)

Query_time distribution: Abfragezeitverteilung. Die Länge spiegelt das Intervallverhältnis wider. In diesem Beispiel ist die Anzahl der Abfragen zwischen 1s und 10s doppelt so hoch wie die der Abfragen über 10s.

Tabellen: An der Abfrage beteiligte Tabellen

Erläuterung: SQL-Anweisung

# Abfrage 1: 0 QPS, 0x Parallelität, ID 0xF9A57DD5A41825CA bei Byte 802 ______
# Dieses Element ist im Bericht enthalten, da es --limit entspricht.
# Punkte: V/M = 0,00
# Zeitbereich: Alle Ereignisse traten am 22.11.2016 um 06:11:40 Uhr auf
# Attribut Prozent Gesamt Min Max Durchschnitt 95% Standardabweichung Median
# ============ === ========= ========= ======== ======= ======= ======= ======= ======== =======
# Anzahl 50 1
# Ausführungszeit 76 2s 2s 2s 2s 2s 0 2s
# Sperrzeit 0 0 0 0 0 0 0 0
# Gesendete Zeilen 20 1 1 1 1 1 0 1
# Zeilen untersuchen 0 0 0 0 0 0 0 0
# Abfragegröße 3 15 15 15 15 15 0 15
# Zeichenfolge:
# Datenbanktest
# Hosts 192.168.8.1
# Benutzer mysql
# Query_time-Verteilung
# 1uns
# 10us
# 100us
# 1ms
# 10ms
# 100ms
# 1s ################################################################
# 10er+
# ERKLÄREN /*!50100 PARTITIONEN*/
wähle sleep(2)\G

5. Anwendungsbeispiele

1. Analysieren Sie die langsame Abfragedatei direkt:

pt-query-digest slow.log > slow_report.log

2. Analysieren Sie die Abfragen der letzten 12 Stunden:

pt-query-digest --since=12h slow.log > slow_report2.log

3. Analysieren Sie Abfragen innerhalb eines bestimmten Zeitraums:

pt-query-digest slow.log – seit „07.01.2017 09:30:00“ – bis „07.01.2017 10:00:00“ >> slow_report3.log

4. Die Analyse bezieht sich auf langsame Abfragen mit Select-Anweisungen

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

5. Langsame Abfrage für einen bestimmten Benutzer

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

6. Alle langsamen Abfragen mit vollständigem Tabellenscan oder vollständigem Join abfragen

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

7. Speichern Sie die Abfrage in der Tabelle query_review

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

8. Speichern Sie die Abfrage in der Tabelle 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. Erfassen Sie die TCP-Protokolldaten von MySQL über tcpdump und analysieren Sie sie anschließend

tcpdump -s 65535 -x -nn -q -tttt -i beliebig -c 1000 Port 3306 > mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log

10. Binlog analysieren

mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql
pt-query-digest --type=binlog mysql-bin000093.sql > slow_report10.log

11. Allgemeines Protokoll analysieren

pt-query-digest --type=genlog localhost.log > slow_report11.log

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels Ihnen bei Ihrem Studium oder Ihrer Arbeit helfen kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der MySql-Analyse langsamer Abfragen und Öffnen des Protokolls langsamer Abfragen
  • mysql langsame Abfrage aktivieren So aktivieren Sie die Protokollierung langsamer MySQL-Abfragen
  • Tipps zum Aktivieren des langsamen Abfrageprotokolls in MYSQL5.7.9
  • So aktivieren Sie das MySQL-Protokoll für langsame Abfragen log-slow-queries
  • Beispiel-Tutorial zur Optimierung langsamer MySQL-Abfragen und zur Analyse des Protokolls langsamer Abfragen
  • So aktivieren Sie das langsame Abfrageprotokoll in MySQL
  • So löschen Sie das Online-Protokoll für langsame Abfragen in MySQL richtig und sicher
  • Grundlegendes Tutorial zur Analyse des MySQL-Protokolls für langsame Abfragen
  • Tutorial zur Konfiguration und Verwendung des MySQL-Protokolls für langsame Abfragen
  • Langsame MySQL-Abfragen und Protokolleinstellungen und -tests

<<:  Detaillierte Erklärung zur Verwendung der Element-el-button-Button-Komponente

>>:  4 Scan-Tools für den Linux-Desktop

Artikel empfehlen

Beispielanalyse der MySQL-Indexabdeckung

Dieser Artikel beschreibt die MySQL-Indexabdeckun...

Vue verwendet Monaco, um Codehervorhebung zu erreichen

Mithilfe der Vue-Sprache und Elementkomponenten m...

mysql teilt eine Datenzeile basierend auf Kommas in mehrere Zeilen auf

Inhaltsverzeichnis Trennwirkung Erläuterung der B...

Codebeispiel für einen einfachen UDP-Server-Client

Ich werde nicht näher auf die Theorie von UDP ein...

So verwenden Sie MQTT im Uniapp-Projekt

Inhaltsverzeichnis 1. Referenz-Plugins im Uniapp ...

So lösen Sie das Problem verschwommener kleiner Symbole auf Mobilgeräten

Vorwort Zuvor habe ich über das Problem der verti...

Tiefgreifendes Verständnis des asynchronen Wartens in Javascript

In diesem Artikel untersuchen wir, warum async/aw...

Implementierung eines Web-Rechners mit nativem JavaScript

In diesem Artikel wird der spezifische JavaScript...

MySQL wählt den passenden Datentyp für die ID

Inhaltsverzeichnis Zusammenfassung der Distribute...

Eine Falle und Lösung bei der Verwendung von fileReader

Inhaltsverzeichnis Eine Falle bei fileReader Fall...

Lösung zum automatischen Neustart von MySQL

Vorwort Kürzlich trat in der Testumgebung ein Pro...

So führen Sie PostgreSQL mit Docker aus

1. Installieren Sie Docker. Referenz-URL: Docker-...