Ein Datenbankserver-High-Iowait-Optimierungsfall
1. Entwicklungsfeedback, dass SQL in einer bestimmten Testumgebung langsam läuft, während das SQL in anderen Testumgebungen sehr schnell läuft. Die beiden Umgebungen haben die gleiche Konfiguration und nur der MySQL-Server wird bereitgestellt.
2. Führen Sie den Befehl top aus und stellen Sie fest, dass die Festplatten-Iowait auf der Maschine mit langsamer SQL-Ausführung viel höher ist als auf der Maschine mit schneller SQL-Ausführung. Es wird vermutet, dass dies der Hauptgrund für die langsame Ausführung von SQL ist, da SQL eine Tabelle lesen muss, die Tabelle groß ist und die Anzahl der zu scannenden Zeilen groß ist.
3. Was führt dazu, dass die Maschine iowait hoch ist? Bei der Ausführung von iotop wurde festgestellt, dass der Prozess, der io verbraucht, hauptsächlich MySQL ist und dass es sich hauptsächlich um den Lesevorgang auf MySQL handelt.
4. Es müssen andere Hochfrequenzabfrageanweisungen vorhanden sein, die ständig Daten aus einer großen Tabelle abfragen, und der Index darf während der Abfrage nicht verwendet werden. Die Anzahl der zu scannenden Tabellenzeilen ist groß Hochfrequente IO-Vorgänge führen dazu, dass andere SQL-Vorgänge, die IO-Vorgänge erfordern, langsam ausgeführt werden.
5. Welche SQL verursacht es? Ich habe das allgemeine Protokoll aktiviert und festgestellt, dass zu viele gesammelte Anweisungen vorhanden waren und das SQL mit hohem Overhead nicht leicht gefunden werden konnte.
6. Aktivieren Sie das langsame Protokoll, setzen Sie long_query_time auf 1, um langsame Abfragen zu erfassen, und verwenden Sie pt-ioprofile, um zu verfolgen, welche Dateien in der MySQL-Datendatei mehr Io verbrauchen.
7. Basierend auf den Ergebnissen von Slow Log (das mit pt-query-digest aggregiert werden kann) und pt-ioprofile wird festgestellt, dass es tatsächlich zwei typische SQL-Anweisungen gibt, die die gesamte Tabelle scannen müssen und die entsprechende Tabelle ist sehr groß und wird häufig ausgeführt. Dies führt zu hohen Festplatten-IOs.
8. Dann besteht das verbleibende Problem darin, die Tabelle oder Abfrage zu optimieren. Der einfachste und direkteste Weg besteht darin, die Abfrageleistung durch die Erstellung geeigneter Indizes zu verbessern und die Anzahl der in der Tabelle gescannten Zeilen zu reduzieren. Wenn Sie die Leistung weiter reduzieren müssen, können Sie das Problem lösen, indem Sie die Schreibmethode von SQL optimieren und anpassen die Tabellenstruktur und die Anpassung der Parameterkonfiguration.
9. Beginnen Sie mit der Methode mit dem größten Gewinn, werten Sie zunächst die SQL-Anweisung aus, überprüfen Sie die Datenverteilung jedes Felds gemäß den Bedingungen in der Anweisung und bewerten Sie die Sinnhaftigkeit der Erstellung eines Index oder einer Mehrspalte Erstellen Sie einen gemeinsamen Index für das Feld mithilfe von EXPLAIN-Eigenschaften usw. und erstellen Sie entsprechende Indizes.
10. Schließlich wurde festgestellt, dass nach der Erstellung des Index die ursprünglichen Anweisungen, die zum Scannen der gesamten Tabelle erforderlich waren, die Anzahl der durch den Index gescannten Zeilen effektiv reduzieren konnten, und dass dann die E/A-Vorgänge reduziert wurden. Das Iowait-Thema des Servers, das ursprüngliche Feedback des langsamer laufenden SQL Die Laufgeschwindigkeit wurde verbessert, ist aber immer noch nicht ideal.
11. Schließlich wurde die Ausführungsgeschwindigkeit der SQL-Anweisung und der gesamte E/A-Verbrauch erheblich verbessert, indem ein Index für die Tabelle erstellt wurde, der der langsamen Anweisung entspricht, und der in der Where-Bedingung verwendete falsche Werttyp korrigiert wurde des Servers wurde stark reduziert.
12. Sie können pt-query-digest verwenden, um das vom optimierten MySQL-Server generierte langsame Protokoll zu aggregieren und pt-ioprofile verwenden, um die IO-Belegung der optimierten MySQL-Datendatei zu analysieren, um den Unterschied vorher und nachher zu verstehen Optimierung.
Das obige ist der detaillierte Inhalt vonSo optimieren Sie den MYSQL-Datenbankserver mit High Iowait. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!