So finden Sie langsame MySQL-Abfragen

So finden Sie langsame MySQL-Abfragen

Vorwort

Ich glaube, dass jeder in seiner täglichen Arbeit Erfahrungen mit SQL-Optimierung hat. Daher müssen Sie vor der Optimierung das langsame SQL finden und analysieren. In diesem Artikel wird beschrieben, wie Sie langsame Abfragen finden.

Das Protokoll langsamer Abfragen ist eine integrierte Funktion von MySQL, die SQL-Anweisungen aufzeichnet, deren Ausführung länger als eine angegebene Zeit dauert.

Im Folgenden sind die Parameter aufgeführt, die sich auf langsame Abfragen beziehen. Bei Interesse können Sie einen Blick darauf werfen:


Parameter Bedeutung
log_ausgabe Speicherort der Protokollausgabe, der Standardwert ist FILE, d. h., in einer Datei speichern. Wenn auf TABLE gesetzt, wird das Protokoll in der Tabelle mysql.show_log aufgezeichnet. Es werden mehrere Formate unterstützt.
langsame_Abfrage-Protokolldatei Gibt den Pfad und den Namen der Protokolldatei für langsame Abfragen an. Sie können einen absoluten Pfad angeben. Der Standardwert ist hostname-slow.log und befindet sich im konfigurierten Verzeichnis datadir.
lange_Abfragezeit Die Ausführungszeit überschreitet diesen Wert, bevor sie im langsamen Abfrageprotokoll aufgezeichnet wird. Die Einheit ist Sekunden. Der Standardwert ist 10
min_untersuchtes_Zeilenlimit SQL-Abfragen mit weniger gescannten Zeilen als dieser Parameter werden nicht im langsamen Abfrageprotokoll aufgezeichnet. Der Standardwert ist 0.
log_queries_not_using_indexes Ob SQL-Anweisungen, die keine Indizes verwenden, im langsamen Abfrageprotokoll aufgezeichnet werden sollen. Wenn diese Konfiguration aktiviert ist, wird der Parameter long_query_time ignoriert. Der Standardwert ist OFF.
log_throttle_queries_not_using_indexes Legen Sie die Anzahl der nicht indizierten Anweisungen fest, die pro Minute protokolliert werden sollen. Wenn diese Zahl überschritten wird, werden nur die Anzahl der Anweisungen und die insgesamt aufgewendete Zeit aufgezeichnet. Der Standardwert ist 0.
Log-Slow-Admin-Anweisungen Zeichnet langsam laufende administrative SQL-Anweisungen auf, wie z. B. ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE und REPAIR TABLE. Die Standardeinstellung ist OFF.
log_slow_slave_statements Zeichnet langsame Abfrageanweisungen auf, die auf dem Slave ausgeführt werden. Wenn der Wert von binlog eine Zeile ist, ist er ungültig. Der Standardwert ist OFF

Langsame Abfrage aktivieren

Es gibt zwei Möglichkeiten, langsame Abfragen zu aktivieren

  1. Ändern der Konfigurationsdatei
  2. Festlegen globaler Variablen

Methode 1 erfordert die Änderung der Konfigurationsdatei my.ini und das Hinzufügen der folgenden Parameter zum Abschnitt [mysqld]:

[mysqld]
log_output='DATEI,TABELLE'
slow_query_log='EIN'
lange_Abfragezeit=0,001

Dann müssen Sie MySQL neu starten, damit die Änderungen wirksam werden. Der Befehl lautet service mysqld restart

Methode 2 kann ohne Neustart wirksam werden, aber ein Neustart führt dazu, dass die Einstellungen ungültig werden. Die Einstellungsbefehle lauten wie folgt:

Setzen Sie GLOBAL slow_query_log = "Ein";
SET GLOBAL log_output = 'DATEI, TABELLE';
SETZEN SIE GLOBAL lange Abfragezeit = 0,001;

Auf diese Weise kann das Protokoll langsamer Abfragen sowohl in der Datei als auch in der Tabelle mysql.slow_log aufgezeichnet werden.

Verwenden Sie die zweite Methode, um das langsame Abfrageprotokoll zu aktivieren, und verwenden Sie dann die vollständige Tabellenabfrageanweisung SELECT * FROM user

Fragen Sie dann das langsame Abfrageprotokoll ab: SELECT * FROM mysql.slow_log , und Sie finden den folgenden Datensatz:


langsames_log

Dabei ist start_time die Ausführungszeit, user_host der Hostname des Benutzers, query_time die für die Abfrage aufgewendete Zeit, lock_time die Zeit, in der die Abfrage die Sperre verwendet, rows_sent die Datenmenge, die von dieser Abfrage an den Client zurückgegeben wird, rows_examined gibt an, wie viele Zeilen diese Anweisung gescannt hat, db ist die Datenbank, sql_text ist dieses SQL und thread_id ist die Thread-ID, die diese Abfrage ausführt.

Auf diese Weise können wir die Daten in der slow_log-Tabelle analysieren und dann das SQL optimieren.

Oben ist eine Analyse anhand einer Tabelle. Das Folgende ist eine Analyse langsamer Abfragen anhand von Dateien.

Wenn Sie nicht wissen, wo die Datei gespeichert ist, können Sie mit SHOW VARIABLES LIKE '%slow_query_log_file%' den Speicherort der Datei anzeigen. Öffnen Sie die langsame Abfrageprotokolldatei. Sie können sehen, dass alle fünf Zeilen ein langsames SQL darstellen. Dies ist schwieriger anzuzeigen, daher können Sie einige Tools zum Anzeigen verwenden.


Protokolldatei für langsame Abfragen

mysqldumpslow

MySQL verfügt über ein integriertes Tool namens mysqldumpslow, das uns bei der Analyse langsamer Abfrageprotokolldateien hilft. Um dieses Tool in einer Windows-Umgebung verwenden zu können, müssen Sie die Perl-Umgebung installieren.

Sie können die Befehlsparameter über -help anzeigen:


mysqldumpslow-Hilfe

Beispielsweise können wir mysqldumpslow -st 10 LAPTOP-8817LKVE-slow.log verwenden, um 10 SQL-Anweisungen nach Abfragezeit sortiert abzurufen.


mysqldumpslow-Ergebnisse

pt-Abfrage-Digest

Darüber hinaus gibt es pt-query-digest, eines der Tools im Percona Toolkit. Die Download-Adresse lautet: https://www.percona.com/downloads/percona-toolkit/LATEST/. Wenn es sich um ein Windows-System handelt, können Sie das Skript in der Umgebung herunterladen, in der Perl installiert ist: https://raw.githubusercontent.com/percona/percona-toolkit/3.x/bin/pt-query-digest

Nachfolgend finden Sie eine kurze Einführung in pt-query-digest:

pt-query-digest ist ein Drittanbietertool zur Analyse langsamer MySQL-Abfragen. Es kann Binlog, allgemeines Log und Slowlog analysieren. Es kann auch MySQL-Protokolldaten analysieren, die von showprocesslist oder tcpdump erfasst wurden. Die Analyseergebnisse können in eine Datei ausgegeben werden. Der Analyseprozess besteht darin, zuerst die Bedingungen der Abfrageanweisung zu parametrisieren und dann die parametrisierten Abfragen zu gruppieren und zu zählen. Die Ausführungszeit, die Anzahl, der Anteil usw. jeder Abfrage werden gezählt. Die Analyseergebnisse können verwendet werden, um Probleme zu finden und sie zu optimieren.

Wenn Sie interessiert sind, können Sie es herunterladen und selbst damit spielen. Das Tool pt-query-digest wird in nachfolgenden Artikeln ausführlich vorgestellt.

Prozessliste anzeigen

Es gibt auch eine Situation, in der die langsame Abfrage noch ausgeführt wird, das langsame SQL jedoch nicht im langsamen Abfrageprotokoll gefunden werden kann. In diesem Fall können Sie den Befehl „show processlist“ verwenden, um die langsame Abfrage zu finden. Dieser Befehl kann die laufenden Threads anzeigen. Das Ausführungsergebnis ist in der folgenden Abbildung dargestellt. Anhand der Zeitgröße können Sie feststellen, ob es sich um eine langsame Abfrage handelt.


Prozessliste anzeigen

Zusammenfassen

In diesem Artikel wird hauptsächlich erläutert, wie langsame Abfragen lokalisiert werden, und es werden kurz die Tools mysqldumpslow und pt-query-digest vorgestellt. Gängige Methoden wie „explain“, „show profile“ und „trace“ werden später ebenfalls erläutert.

Welche Methoden verwenden Sie zum Auffinden langsamer Abfragen oder zur Optimierung von SQL?

Dies ist das Ende dieses Artikels zum Auffinden langsamer MySQL-Abfragen. Weitere Informationen zum Auffinden langsamer MySQL-Abfragen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Referenzdokumentation

https://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html

Das könnte Sie auch interessieren:
  • Beispiel-Tutorial zur Optimierung langsamer MySQL-Abfragen und zur Analyse des Protokolls langsamer Abfragen
  • Ein kurzer Vortrag über das MySQL-Optimierungstool - langsame Abfrage
  • Methode und Optimierungsprinzip für langsame MySQL-Abfragen
  • So optimieren Sie die MySQL-Leistung durch langsame MySQL-Abfragen
  • Protokollieren Sie ein langsames Abfrageereignis, das durch eine Fehleinschätzung des Online-MySQL-Optimierers verursacht wurde.
  • Detailliertes Beispiel zum Auffinden und Optimieren langsamer SQL-Abfragen in MySQL

<<:  HTML erstellt eine einfache und schöne Anmeldeseite

>>:  Detaillierte Erläuterung der Verwendung von Object.create-Instanzen in js

Artikel empfehlen

Wichtige Updates für MySQL 8.0.23 (neue Funktionen)

Autor: Guan Changlong ist DBA in der Delivery Ser...

CSS-Standard: Eigenschaft „vertical-align“

<br />Originaltext: http://www.mikkolee.com/...

Zusammenfassung der Lösungen für allgemeine Linux-Probleme

1. Centos7 unter VMware verbinden und eine feste ...

10 Tipps zur Verbesserung der Website-Benutzerfreundlichkeit

Ob Unternehmenswebsite, persönlicher Blog, Shoppi...

So konfigurieren Sie den Runner-Container in Docker

1. Erstellen Sie einen Runner-Container mk@mk-pc:...

Details zur Verwendung des JSON-Typs in MySQL 5.7

JSON ist ein leichtes Datenaustauschformat, das e...

js canvas realisiert kreisförmige Wasseranimation

In diesem Artikelbeispiel wird der spezifische Co...

HTML-Tutorial: Sammlung häufig verwendeter HTML-Tags (6)

Diese eingeführten HTML-Tags entsprechen nicht un...

Webdesign-Erfahrung: Das Navigationssystem schlank machen

<br />Bei Diskussionen mit meinen Freunden h...

HTML-Grundlagen HTML-Struktur

Was ist eine HTML-Datei? HTML steht für Hyper Text...

Beispiele für optimistisches und pessimistisches Sperren in MySQL

Die Aufgabe der Parallelitätskontrolle in einem D...

MySQL8.0.18-Konfiguration mehrerer Master und eines Slaves

Inhaltsverzeichnis 1. Realistischer Hintergrund 2...

Detaillierte Erläuterung der gleichzeitigen Parameteranpassung von MySQL

Inhaltsverzeichnis Abfrage-Cache-Optimierung Über...