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

Beispiel und Lösung für einen SQL-Injection-Sicherheitslückenprozess

Codebeispiel: öffentliche Klasse JDBCDemo3 { öffe...

Zehn nützliche und einfache MySQL-Funktionen

Funktion 0. Aktuelle Uhrzeit anzeigen Befehl: sel...

Zusammenfassung der grundlegenden Wissenspunkte der Linux-Gruppe

1. Grundlegende Einführung in die Linux-Gruppe Un...

Beispiel für Javascript-Bubblesort

Inhaltsverzeichnis 1. Was ist Bubble Sort 2. Gebe...

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

1. Erstellen Sie mit der Methode Object.create() ...

Zusammenfassung der Merkmale des SQL-Modus in MySQL

Vorwort Der SQL-Modus wirkt sich auf die von MySQ...

So verwenden Sie das JavaScript-Strategiemuster zum Validieren von Formularen

Inhaltsverzeichnis Überblick Formularvalidierung ...

js, um einfache Lupeneffekte zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

XHTML-Erste-Schritte-Tutorial: Einfache Webseitenerstellung

Erstellen Sie Ihre erste Webseite in einer Minute...

Grundlegende Verwendung und Beispiele von yum (empfohlen)

yum-Befehl Yum (vollständiger Name Yellow Dog Upd...

Detaillierte Erklärung des Nginx-Prozessplanungsproblems

Nginx verwendet eine feste Anzahl von Multiprozes...

Grafisches Tutorial zu MySQL-Downloads und Installationsdetails

1. Um die MySQL-Datenbank herunterzuladen, besuch...