Erläuterung der MySQL-Leistungsprüfung durch den Befehl „show processlist“

Erläuterung der MySQL-Leistungsprüfung durch den Befehl „show processlist“

Der Befehl „show processlist“ ist sehr nützlich. Manchmal läuft MySQL zu mehr als 50 % oder mehr, daher müssen Sie diesen Befehl verwenden, um zu sehen, welche SQL-Anweisung mehr Ressourcen belegt, damit Sie wissen, welche Website ein Programmproblem hat.

Die Ausgabe des Befehls „show processlist“ zeigt, welche Threads ausgeführt werden. Dies kann bei der Identifizierung problematischer Abfragen hilfreich sein. Wenn Sie über das SUPER-Privileg verfügen, können Sie alle Threads sehen. Andernfalls können Sie nur die Threads sehen, die Sie initiiert haben (die Threads, die unter dem aktuellen MySQL-Konto ausgeführt werden).

Lassen Sie mich zunächst kurz auf die Bedeutung und den Zweck jeder Spalte eingehen

Die erste Spalte, „ID“, ist ein Flag, das sehr nützlich ist, wenn Sie eine Anweisung abbrechen möchten.

  • In der Benutzerspalte wird der aktuelle Benutzer angezeigt. Wenn Sie nicht der Root-Benutzer sind, zeigt dieser Befehl nur die SQL-Anweisungen innerhalb Ihres Berechtigungsbereichs an.
  • In der Spalte „Host“ werden die IP-Adresse und der Port angezeigt, von denen die Anweisung ausgegeben wurde. Haha, es kann verwendet werden, um den Benutzer aufzuspüren, der die problematische Aussage gemacht hat.
  • Die Spalte „db“ zeigt an, mit welcher Datenbank der Prozess aktuell verbunden ist.
  • In der Befehlsspalte wird der von der aktuellen Verbindung ausgeführte Befehl angezeigt. Normalerweise ist das „sleep“, „Query“ oder „Connect“.
  • Die Zeitspalte gibt die Dauer dieses Zustands in Sekunden an.
  • Die Spalte „Status“ zeigt den Status der SQL-Anweisung unter Verwendung der aktuellen Verbindung an. Dies ist eine sehr wichtige Spalte. Alle Status werden später beschrieben. Bitte beachten Sie, dass der Status nur ein bestimmter Status bei der Ausführung einer Anweisung ist. Beispielsweise muss eine SQL-Anweisung möglicherweise die Zustände „In temporäre Tabelle kopieren“, „Ergebnis sortieren“ und „Daten senden“ durchlaufen, bevor sie abgeschlossen werden kann.
  • In der Infospalte wird das SQL-Statement angezeigt. Aufgrund der begrenzten Länge werden lange SQL-Statements nicht vollständig angezeigt, dies ist jedoch eine wichtige Grundlage zur Beurteilung problematischer Statements.

Der kritischste Teil dieses Befehls ist die Spalte „state“. Die von MySQL aufgelisteten Zustände sind hauptsächlich die folgenden:

Checking table

Überprüfen der Datentabellen (dies erfolgt automatisch).

Closing tables

Die geänderten Daten in der Tabelle werden auf die Festplatte geschrieben und die verwendete Tabelle wird geschlossen. Dieser Vorgang geht sehr schnell, ist dies jedoch nicht der Fall, sollten Sie prüfen, ob die Festplatte voll ist oder ob sie stark ausgelastet ist.

Connect Out

Der Replikations-Slave-Server stellt eine Verbindung zum Master-Server her.

Copying to tmp table on disk

Da der temporäre Ergebnisset größer als tmp_table_size ist, wird die temporäre Tabelle aus Speichergründen vom Arbeitsspeicher in den Festplattenspeicher konvertiert.

Creating tmp table

Erstellen einer temporären Tabelle zum Speichern teilweiser Abfrageergebnisse.

deleting from main table

Der Server führt den ersten Teil einer Löschung mehrerer Tabellen aus und hat gerade die erste Tabelle gelöscht.

deleting from reference tables

Der Server führt den zweiten Teil einer Mehrfachtabellenlöschung aus und löscht Datensätze aus anderen Tabellen.

Flushing tables

FLUSH TABLES wird ausgeführt und wartet darauf, dass andere Threads die Datentabelle schließen.

Killed

Wenn eine Kill-Anforderung an einen Thread gesendet wird, überprüft der Thread das Kill-Flag und bricht die nächste Kill-Anforderung ab. MySQL überprüft das Kill-Flag in jeder Hauptschleife, aber in einigen Fällen kann es eine Weile dauern, bis der Thread beendet wird. Wenn der Thread durch andere Threads gesperrt ist, wird die Kill-Anforderung sofort wirksam, wenn die Sperre aufgehoben wird.

Locked

Durch eine andere Abfrage gesperrt.

Sending data

Die Datensätze der Select-Abfrage werden verarbeitet und die Ergebnisse an den Client gesendet.

Sorting for group

Sortieren nach GROUP BY.

Sorting for order

Sortierung für ORDER BY.

Opening tables

Dieser Vorgang sollte schnell ablaufen, sofern er nicht durch andere Faktoren gestört wird. Beispielsweise kann die Datentabelle nicht von anderen Threads geöffnet werden, bis die Anweisung „Alter TABLE“ oder „LOCK TABLE“ abgeschlossen ist. Ich versuche, einen Tisch zu öffnen.

Removing duplicates

Es wird eine Select DISTINCT-Abfrage ausgeführt, aber MySQL konnte die doppelten Datensätze im vorherigen Schritt nicht durch Optimierung beseitigen. Daher muss MySQL doppelte Datensätze erneut entfernen und dann die Ergebnisse an den Client senden.

Reopen table

Es wird eine Sperre für eine Tabelle eingerichtet, dies kann jedoch erst nach einer Änderung der Tabellenstruktur erfolgen. Die Sperre wurde aufgehoben, die Tabelle wurde geschlossen und es wird versucht, die Tabelle erneut zu öffnen.

Repair by sorting

Korrigieren Sie die Anweisungen zum Sortieren, um einen Index zu erstellen.

Repair with keycache

Die Reparaturanweisung besteht darin, unter Verwendung des Index-Cache nacheinander neue Indizes zu erstellen. Dies ist langsamer als die Reparatur durch Sortieren.

Searching rows for update

Zur Aktualisierung werden die Datensätze gesucht, die die Bedingungen erfüllen. Dieser Vorgang muss abgeschlossen sein, bevor Update zugehörige Datensätze ändern kann.

Sleeping

Warte auf eine neue Clientanfrage.

System lock

Wartet auf den Erwerb einer externen Systemsperre. Wenn Sie nicht mehrere MySQLD-Server ausführen, die gleichzeitig dieselbe Tabelle anfordern, können Sie externe Systemsperren deaktivieren, indem Sie den Parameter --skip-external-locking hinzufügen.

Upgrading lock

Insert DELAYED versucht, eine Tabellensperre zu erwerben, um einen neuen Datensatz einzufügen.

Updating

Nach passenden Datensätzen suchen und diese ändern.

User Lock

Wartet auf GET_LOCK().

Waiting for tables

Der Thread wird benachrichtigt, dass die Datentabellenstruktur geändert wurde und erneut geöffnet werden muss, um die neue Struktur zu erhalten. Um die Datentabelle dann erneut zu öffnen, müssen Sie warten, bis alle anderen Threads die Tabelle schließen. Diese Benachrichtigung wird in den folgenden Situationen generiert: FLUSH TABLES tbl_name, Alter TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE oder OPTIMIZE TABLE.

waiting for handler insert

Insert DELAYED hat alle ausstehenden Einfügevorgänge verarbeitet und wartet auf neue Anforderungen.

Die meisten Zustände entsprechen sehr schnellen Vorgängen. Wenn ein Thread mehrere Sekunden lang im gleichen Zustand bleibt, liegt möglicherweise ein Problem vor und muss überprüft werden. Es gibt noch weitere Status, die oben nicht aufgeführt sind, die meisten davon sind jedoch nur nützlich, um festzustellen, ob Fehler beim Server vorliegen.

Gemeinsame Leistungsindikatoren

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:
  • MySQL SHOW PROCESSLIST unterstützt den gesamten Prozess der Fehlerbehebung
  • mysql show processlist zeigt den MySQL-Abfrageprozess an
  • So überprüfen Sie MySQL-Sperren mit dem Befehl „MySQL Show Processlist“
  • Allgemeine MySQL-Befehle und chinesische verstümmelte Zeichen in Ubuntu
  • Detaillierte Einführung in die Verwendung des Show-Befehls in MySQL
  • Anweisungen zum Hinzufügen der Direktive „extension=php_mysqli.dll“ in php.ini
  • Analyse der Verwendung des MySQL-Datenbankbefehls „show processlist“

<<:  Über React Native, das keine Verbindung zum Simulator herstellen kann

>>:  Detaillierte Erläuterung des Dockerfiles zum Erstellen eines benutzerdefinierten Docker-Images und Vergleich der CMD- und ENTRYPOINT-Anweisungen

Artikel empfehlen

So verwenden Sie den Linux-Befehl „locate“

01. Befehlsübersicht Der Befehl „locate“ ist eige...

Implementierung des Umschreibesprungs in Nginx

1. Neuer und alter Domain-Namenssprung Anwendungs...

Docker erstellt Redis5.0 und mountet Daten

Inhaltsverzeichnis 1. Einfaches Einbinden persist...

Die Aktualisierung der Seite zur Formularübermittlung springt nicht

1. Quellcode entwerfen Code kopieren Der Code laut...

Linux-Fernsteuerungsprogramm für Windows-System (drei Methoden)

Manchmal müssen wir Programme auf dem Windows-Sys...

mysql ist keine interne Befehlsfehlerlösung

Der Fehler „mysql ist kein interner Befehl“ tritt...

CSS3 verwendet scale() und rotate() zum Zoomen und Drehen

1. scale()-Methode Zoom steht für „Verkleinern“ u...

Die konkrete Umsetzung des JavaScript-exklusiven Denkens

Im vorherigen Blog hat Xiao Xiong die Methoden ve...

So verbergen Sie die Versionsnummer und die Cache-Zeit von Webseiten in Nginx

Nginx-Optimierung --- Versionsnummer und Cache-Ze...