MySQL Server IO 100 % Analyse- und Optimierungslösung

MySQL Server IO 100 % Analyse- und Optimierungslösung

Vorwort

Während des Stresstests besteht das unmittelbarste Leistungsproblem aufgrund von Engpässen bei der Ressourcennutzung darin, dass die Reaktionszeit bei Geschäftstransaktionen zu lang ist und der TPS allmählich abnimmt usw. Bei der Problemortanalyse hat die Überwachung der Serverressourcenauslastung (z. B. mithilfe von TOP oder nmon zum Überprüfen der CPU- und Speicherauslastung) normalerweise höchste Priorität. Anschließend werden E/A-Probleme (z. B. Netzwerk-E/A- und Festplatten-E/A-Probleme) behoben. Wenn es sich um ein Festplatten-E/A-Problem handelt, liegt das allgemeine Problem an einem SQL-Syntaxproblem, einem MySQL-Parameterkonfigurationsproblem oder einem Hardware-Engpass des Servers selbst, der zu einem Problem mit der IOPS-Durchsatzrate führt.

In diesem Artikel werden hauptsächlich der Analyse- und Optimierungsplan für MySQL Server IO 100 % vorgestellt. Werfen wir einen Blick auf die detaillierte Einführung.

【Frage】

Es gibt eine MySQL 5.6.21-Datenbankinstanz, die hauptsächlich schreibbasiert ist, und der IO %util liegt bei nahezu 100 %

Hohe Schreib-IOPS

【Analyseprozess】

1. Mit dem iotop-Tool können Sie den MySQL-Thread mit dem höchsten aktuellen IO-Verbrauch sehen

2. Überprüfen Sie den Stapel von Thread 49342. Sie können sehen, dass das Redo-Protokoll aktualisiert wird, entsprechend Datei 9.

3. Datei Nr. 9 entspricht der ersten Datei des Redo-Logs

Warum aktualisiert der MySQL-Prozess die Redo-Logdatei häufig? Wir müssen dies in Kombination mit der Redo-Log-Flushing-Strategie analysieren. Der Schlüssel ist der Parameter innodb_flush_log_at_trx_commit.

Der Standardwert ist 1, was der sicherste Wert ist. Allerdings kann er bei hohem Schreibdruck auch erhebliche Auswirkungen auf die Leistung haben. Jedes Mal, wenn eine Transaktion festgeschrieben wird, schreibt MySQL die Daten im Protokollpuffer in die Protokolldatei und überträgt sie auf die Festplatte.

In Anbetracht des Schreibszenarios dieses Clusters handelt es sich bei den meisten Schreibvorgängen um kleine Transaktionen, und jedes Transaktionscommit löst eine Datenträgerbereinigung aus. In diesem Szenario ist der Optimierungseffekt einer Erhöhung von innodb_log_buffer_size und innodb_log_file_size nicht offensichtlich.

【Optimierungsplan】

1. Auf Anwendungsebene kann bei Systemen mit hohem Schreibdruck eine einzelne Insert-Anweisung in eine kleine Gruppe von Insert-Anweisungen optimiert werden. Dadurch wird die Anzahl der Transaktions-Commits und Redo-Log-Flushes reduziert und theoretisch die Leistung verbessert.

2. Auf MySQL-Ebene kann bei Systemen vom Typ „Protokoll“ der Parameter innodb_flush_log_at_trx_commit auf 2 eingestellt werden, wenn im Falle von Ausfallzeiten ein geringer Datenverlust zulässig ist.

Wenn der Wert auf 2 gesetzt ist, werden nur Schreibvorgänge ausgeführt, wenn die Transaktion festgeschrieben ist, und es wird garantiert nur in den Systemseitencache geschrieben. Daher gehen Transaktionen nicht verloren, wenn die Instanz abstürzt, aber Transaktionen können verloren gehen, wenn das System abstürzt.

Beim Test auf diesem Server sanken die IO-Anforderungen von 200 M/S auf etwa 10 M/S, wenn der Parameter auf 2 eingestellt wurde, und der Druck verringerte sich um mehr als das Zehnfache.

3. Ersetzen Sie auf Systemebene die Festplatte durch eine leistungsstärkere

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. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Analysieren Sie die Probleme der SQL-Anweisungseffizienzoptimierung beim Lesen, Schreiben, Indizieren und anderen Vorgängen in MySQL-Tabellen
  • Xiaomi macht SOAR, das intelligente SQL-Optimierungs- und Umschreibetool, offiziell zu Open Source
  • Detaillierte Erläuterung der MySQL-Methode zur Optimierung der Reihenfolge nach Anweisung
  • Detaillierte Erläuterung der MySQL-Konfigurationsparameteroptimierung
  • Nutzungs- und Leistungsoptimierungstechniken für die Aggregatfunktion „count“ in MySQL
  • MySQL fragt den aktuellsten Datensatz der SQL-Anweisung ab (Optimierung)
  • Detaillierte Erläuterung von 30 SQL-Abfrageoptimierungstechniken für MySQL-Zehnmillionen großer Datenmengen
  • PHP+MySQL, um innerhalb eines bestimmten Zeitraums ein Beispiel für eine tägliche Datenstatistikoptimierung zu erreichen
  • SQL-Anweisungsoptimierung: JOIN-, LEFT JOIN- und RIGHT JOIN-Anweisungsoptimierung
  • Optimierung der Datenbank-SQL-Anweisung

<<:  Vue implementiert Tab-Beschriftung (Beschriftung übertrifft automatisches Scrollen)

>>:  Detailliertes Tutorial zum Bereitstellen von Apollo mit Docker

Artikel empfehlen

Welche Vorteile bietet die Verwendung des B+-Baumindex in MySQL?

Bevor wir dieses Problem verstehen, schauen wir u...

Was die Website am meisten braucht, ist eine Verbesserung der Erfahrung der Zielgruppe

„Der große Fluss fließt nach Osten, die Wellen sp...

Zusammenfassung zum Erstellen und Verwenden von Array-Methoden in Bash-Skripten

Definieren eines Arrays in Bash Es gibt zwei Mögl...

So unterstreichen Sie das A-Tag und ändern die Farbe vor und nach dem Klicken

Code kopieren Der Code lautet wie folgt: ein:link...

Detaillierte Erklärung der Routenkonfiguration von Vue-Router

Inhaltsverzeichnis einführen Objektattribute in R...

Detaillierte Erklärung zur Installation von PHP7 unter Linux

Wie installiere ich PHP7 unter Linux? 1. Installi...

Eine SQL-Anweisung schließt die MySQL-Deduplizierung ab und behält eine

Als ich vor einigen Tagen an einer Anforderung ar...

Anleitung zur Verwendung von env in vue cli

Inhaltsverzeichnis Vorwort Einführung-Offiziell B...

Beispiel für die Einrichtung eines Third-Level-Domain-Namens in nginx

Problembeschreibung Durch die Konfiguration von n...