So optimieren Sie die MySQL-Leistung durch langsame MySQL-Abfragen

So optimieren Sie die MySQL-Leistung durch langsame MySQL-Abfragen

Mit zunehmender Anzahl von Besuchen steigt der Druck auf die MySQL-Datenbank. Fast alle Webanwendungen, die die MySQL-Architektur verwenden, haben Leistungsprobleme mit der Datenbank. Es ist sehr nützlich, problematische Abfragen über das MySQL-Protokoll für langsame Abfragen zu verfolgen. Mit diesem Protokoll können die SQL-Anweisungen im aktuellen Programm analysiert werden, die viele Ressourcen verbrauchen.

Wir können das langsame Abfrageprotokoll über die Datei my.cnf aktivieren. Schauen wir uns die Bedeutung der relevanten Parameter an.

log-slow-queries <slow_query_log_file>

Datei, in der Protokolle langsamer Abfragen gespeichert werden. Sie müssen sicherstellen, dass der Prozessbenutzer des MySQL-Serverprozesses mysqld_safe über W-Berechtigungen für die Datei verfügt.

long_query_time

Wenn die Abfragezeit diesen Wert überschreitet, wird sie als langsame Abfrage betrachtet und aufgezeichnet. Die Einheit ist Sekunden, der Minimalwert ist 1 und der Standardwert ist 10 Sekunden. 10 Sekunden sind für die meisten Anwendungen zu lang. Wir empfehlen, mit 3 Sekunden zu beginnen und diese schrittweise zu reduzieren, wobei Sie jedes Mal die 10 „teuersten“ SQL-Anweisungen finden und optimieren. Tag für Tag, Schritt für Schritt optimieren. Das gleichzeitige Suchen vieler SQL-Anweisungen ist für die Optimierung wenig sinnvoll.

log-queries-not-using-indexes

MySQL zeichnet Abfragen, die keine Indizes verwenden, im Protokoll für langsame Abfragen auf. Unabhängig von der Ausführungsgeschwindigkeit wird eine Abfrage, die keinen Index verwendet, protokolliert. Manchmal sind Abfragen, die keine Indizes verwenden, sehr schnell (z. B. das Scannen einer kleinen Tabelle), sie können jedoch auch zu einer Verlangsamung des Servers führen und sogar viel Speicherplatz beanspruchen.

log-slow-admin-statements

Einige Managementanweisungen werden ebenfalls aufgezeichnet. Zum Beispiel OPTIMEZE TABLE , ALTER TABLE usw.

Langsame Abfrage aktivieren

Methode 1: Suchen Sie die MySQL-Konfigurationsdatei my.cnf auf dem Server und fügen Sie dann den folgenden Inhalt zum mysqld-Modul hinzu

log_slow_queries = NEIN
log-slow-queries = /var/run/mysqld/slow_querys.log 
lange_Abfragezeit = 3 
Protokollabfragen ohne Verwendung von Indizes 
Log-Slow-Admin-Anweisungen

Starten Sie dann den MySQL-Server neu. Dies dient zur Überprüfung des langsamen Abfrageprotokolls mit dem folgenden Befehl:

tail -f /var/run/mysqld/slow_querys.log

Methode 2: Ändern Sie die globalen Variablen von MySQL. Der Vorteil dabei ist, dass Sie den MySQL-Server nicht neu starten müssen. Sie können sich einfach bei MySQL anmelden und das SQL-Skript ausführen.

Setzen Sie global slow_query_log=ON;

setze global long_query_time=3;

Führen Sie dann den folgenden Befehl aus, um zu überprüfen, ob er erfolgreich war

mysql> Variablen wie „long%“ anzeigen;
+-----------------+------------+
| Variablenname | Wert |
+-----------------+------------+
| lange Abfragezeit | 10.000000 |
+-----------------+------------+
1 Zeile im Satz (0,00 Sek.)

mysql> Variablen wie „slow%“ anzeigen;
+---------------------+---------------+
| Variablenname | Wert |
+---------------------+---------------+
| langsame Startzeit | 2 |
| slow_query_log | EIN |
| slow_query_log_datei | /tmp/slow.log |
+---------------------+---------------+
3 Zeilen im Satz (0,00 Sek.)

Analysieren langsamer Abfrageprotokolle

Methode 1: Indem wir uns die langsame Abfrageprotokollanalyse von MySQL ansehen, können wir beispielsweise tail -f slow_query.log verwenden, um den Inhalt und die Bedeutung der Felder anzuzeigen

# Zeit: 110107 16:22:11 
# Benutzer@Host: root[root] @ localhost [] 
# Abfragezeit: 9,869362 Sperrzeit: 0,000035 Gesendete Zeilen: 1 Untersuchte Zeilen: 6261774 
SET-Zeitstempel=1294388531; 
wähle count(*) aus ep_friends;
  • Die erste Zeile, der Zeitpunkt, zu dem die SQL-Abfrage ausgeführt wurde
  • In der zweiten Zeile werden die Verbindungsinformationen zur Ausführung von SQL-Abfragen angezeigt.
  • Die dritte Zeile enthält einige nützliche Informationen
  • Query_time SQL-Ausführungszeit; je länger, desto langsamer.
  • Lock_time Wartezeit für Tabellensperren auf der MySQL-Server-Ebene (nicht auf der Speicher-Engine-Ebene)
  • Rows_sent Die Anzahl der von der Abfrage zurückgegebenen Zeilen
  • Rows_examined Die Anzahl der von der Abfrage untersuchten Zeilen

Methode 2: Verwenden Sie den Befehl mysqldumpslow, um beispielsweise zu analysieren

mysqldumpslow -sc -t 10 /tmp/slow-log

Dadurch werden die 10 wichtigsten SQL-Anweisungen mit den meisten Datensätzen ausgegeben. Dabei gilt:

-s gibt die Sortiermethode an. c, t, l und r werden jeweils nach der Anzahl der Datensätze, der Zeit, der Abfragezeit und der Anzahl der zurückgegebenen Datensätze sortiert. ac, at, al und ar geben die entsprechende umgekehrte Sortierung an. -t bedeutet oberste n, was die Anzahl der zurückgegebenen Datensätze angibt. Auf -g kann ein Übereinstimmungsmuster für reguläre Ausdrücke folgen, das nicht zwischen Groß- und Kleinschreibung unterscheidet.

Zum Beispiel

/Pfad/mysqldumpslow -sr -t 10 /tmp/slow-log

Holen Sie sich die 10 wichtigsten Abfragen, die die meisten Datensätze zurückgeben.

/Pfad/mysqldumpslow -st -t 10 -g "left join" /tmp/slow-log

Holen Sie sich die ersten 10 Abfrageanweisungen mit Left Joins, sortiert nach Zeit.

Nachteile langsamer Abfrageprotokolle

Das Aufzeichnen langsamer Abfragen kann Ihnen jedoch dabei helfen, Ihr Produkt zu optimieren. Die aktuelle Version von MySQL weist jedoch noch einige Mängel auf.

1. In MySQL 5.0 ist die Zeitgranularität von long_query_time nicht fein genug und der Mindestwert beträgt 1 Sekunde. Bei Webskripten mit hoher Parallelitätsleistung ist das Erscheinen innerhalb von 1 Sekunde von geringer Bedeutung. Das heißt, es gibt relativ wenige Abfragen, die 1 Sekunde dauern. Erst in MySQL 5.1.21 wurde eine feinkörnigere long_query_time-Einstellung bereitgestellt.

2. Nicht alle vom Server ausgeführten Abfragen können im Slow-Log aufgezeichnet werden. Obwohl das normale MySQL-Protokoll alle Abfragen aufzeichnet, werden sie vor der Analyse der Abfrage aufgezeichnet. Dies bedeutet, dass normale Protokolle keine Informationen wie Ausführungszeit, Tabellensperrzeit, Anzahl der geprüften Zeilen usw. enthalten können.

3. Wenn die Option log_queries_not_using_indexes aktiviert ist, wird das langsame Abfrageprotokoll mit zu vielen Junk-Logdatensätzen gefüllt. Diese schnellen und effizienten vollständigen Tabellenscanabfragen (kleine Tabellen) löschen die wirklich nützlichen langsamen Abfragedatensätze aus. Auch Abfragen wie select * from category werden aufgezeichnet. Wenn die Option log_queries_not_using_indexes aktiviert ist, wird das langsame Abfrageprotokoll mit zu vielen Junk-Logdatensätzen gefüllt. Diese schnellen und effizienten vollständigen Tabellenscanabfragen (kleine Tabellen) löschen die wirklich nützlichen langsamen Abfragedatensätze aus. Auch Abfragen wie select * from category werden aufgezeichnet.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Methode und Optimierungsprinzip für langsame MySQL-Abfragen
  • MySQL Slow Query-Optimierung: Die Vorteile von Limit aus Theorie und Praxis
  • Beispiel-Tutorial zur Optimierung langsamer MySQL-Abfragen und zur Analyse des Protokolls langsamer Abfragen
  • Lösung zur Optimierung langsamer MySQL-Abfragen

<<:  Ein kurzes Verständnis mehrerer Planungsalgorithmen für den siebenschichtigen Lastenausgleich von Nginx

>>:  So implementieren Sie eine bidirektionale Bindungsfunktion in vue.js mit reinem JS

Artikel empfehlen

So stellen Sie Redis in Docker bereit und starten es

Redis im Docker bereitstellen Installieren Sie zu...

Prinzipien der MySQL-Datentypoptimierung

MySQL unterstützt viele Datentypen und die Auswah...

Detaillierte Erklärung der jQuery-Kettenaufrufe

Inhaltsverzeichnis Kettenanrufe Ein kleiner Koffe...

Allgemeiner Leitfaden zur Sicherheitskonfiguration von Linux/CentOS-Servern

Linux ist ein offenes System. Im Internet sind vi...

Das mobile Vue-Terminal realisiert den Finger-Gleiteffekt

In diesem Artikelbeispiel wird der spezifische Co...

Verwendung von „Select“, „Distinct“ und „Limit“ in MySQL

Inhaltsverzeichnis 1. Einleitung 2. auswählen 2.1...

JavaScript zur Implementierung des Flugzeugkriegsspiels

In diesem Artikel erfahren Sie, wie Sie mit Canva...

Datensatz zu langsamen MySQL-Abfragen und Abfragerekonstruktionsmethoden

Vorwort Was ist eine langsame Abfrage und wie kan...

Lösung für den Fehler 1045, wenn Navicat eine Verbindung zu MySQL herstellt

Beim Herstellen einer Verbindung mit der lokalen ...

So importieren Sie txt in MySQL unter Linux

Vorwort Als ich gestern ein kleines Projekt schri...

Vue implementiert Div-Rad zum Vergrößern und Verkleinern

Implementieren Sie das Vergrößern und Verkleinern...