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

So führen Sie den Top-Befehl im Batchmodus aus

Der Befehl „top“ ist der beste Befehl, den jeder ...

Probleme mit Vue, das die Homepage von Bibibili imitiert

Technische Struktur Das Projekt ist in zwei Teile...

Hilfe zum Webdesign: Datenreferenz für Web-Schriftgrößen

<br />Der Inhalt wurde aus dem Internet repr...

MAC+PyCharm+Flask+Vue.js-Build-System

Inhaltsverzeichnis Konfigurieren Sie node.js+nvm+...

Verwendung der MySQL-Zeitdifferenzfunktionen TIMESTAMPDIFF und DATEDIFF

Verwendung der Zeitdifferenzfunktionen TIMESTAMPD...

So finden Sie langsame SQL-Anweisungen in MySQL

Wie finde ich langsame SQL-Anweisungen in MySQL? ...

So verwenden Sie den Linux-Befehl whatis

01. Befehlsübersicht Der Befehl whatis sucht in e...

Natives JavaScript-Message Board

In diesem Artikel wird der spezifische JavaScript...

Wie erreicht MySQL eine Master-Slave-Synchronisierung?

Die Master-Slave-Synchronisierung, auch Master-Sl...

Erste Erfahrungen mit der Texterstellung mit Javascript Three.js

Inhaltsverzeichnis Wirkung Beginnen Sie mit der T...

So behandeln Sie einen Überlauf numerischer MySQL-Typen

Lassen Sie mich Ihnen nun eine Frage stellen. Was...

Häufig verwendete HTML-Meta-Enzyklopädie (empfohlen)

Der Meta-Tag ist ein Hilfstag im Head-Bereich der...

Tabelle zeigt den Grenzcode, den Sie anzeigen möchten

Gemeinsame Eigenschaften von Tabellen Die grundle...