Heim  >  Artikel  >  Datenbank  >  MySQL-Analyse – PROCESSLIST-Details anzeigen

MySQL-Analyse – PROCESSLIST-Details anzeigen

黄舟
黄舟Original
2017-03-02 16:02:122295Durchsuche

Als ich das letzte Mal ein Abstimmungssystem erstellt habe, blieb es während der Spitzenzeit der Aktivität lange Zeit hängen, und die Auswirkung einer vorübergehenden Erhöhung der Bandbreite war nicht offensichtlich.

Gehen Sie zur Analyse auf den Server. Eine große Menge an CPU in oben wird in IO-Wartezeit verbraucht . Alle Anzeichen deuten auf MySQL, langsame Protokollabfragen und Indexstruktur hin, aber ich habe das Gefühl, dass das grundlegende Problem nicht gefunden wurde. Endlich in zeigen Während der Prozessliste wurde eine große Anzahl von Sperrprozessen gefunden. Haha, das Problem ist offensichtlich.

Die Abstimmungstabelle verwendet die Mysiam-Engine. Nachdem die Stimmen gezählt wurden, Update sperrt die TabelleDas ist richtig. Außerdem ist die Serverleistung im Allgemeinen langsam und das Programm führt bei der Verarbeitung der Abstimmungsseite kein asynchrones Downgrade durch. Aber der Schlüsselfaktor wurde immer noch gefunden, es war die MySQL-Sperre.


Wenn also Probleme mit der MySQL-Leistung entdeckt werden, ist SHOW PROCESSLIST immer noch sehr effektiv, um anzuzeigen, welche Threads ausgeführt werden, zum Beispiel:




Die Statusspalteninformationen sind sehr wichtig. Schauen wir uns zunächst die Bedeutung jeder Spalte und dann den allgemeinen Statusstatus an


Die Bedeutung jeder Spalte

1. id: Eine Kennung, die verwendet wird, wenn Sie eine Anweisung beenden möchten, z. B. mysql>

2. Benutzer: Zeigen Sie den aktuellen Benutzer an. Wenn Sie nicht root sind, zeigt dieser Befehl nur die SQL-Anweisungen innerhalb Ihrer Berechtigung an

3. Host: Zeigt an, von welcher IP und welchem ​​Port diese Erklärung gesendet wurde. Dies kann verwendet werden, um den Benutzer zu verfolgen, der die problematische Erklärung abgegeben hat

4. db: Anzeige, mit welchem ​​Prozess dieser Prozess aktuell verbunden ist

5. Befehl: Anzeige der ausgeführte Befehl der aktuellen Verbindung, Normalerweise schlafen, abfragen, verbinden

6. Zeit: Die Dauer Die Einheit dieses Zustands ist Sekunden

7. Zustand: zeigt den Status der SQL-Anweisung unter Verwendung der aktuellen Verbindung an, sehr Wichtige Spalte, Status ist nur eine Anweisung. Ein bestimmter Status während der Ausführung, z. B. eine Abfrage, muss kopiert werden in die tmp-Tabelle, Sortierergebnis, Senden von Daten und andere Zustände können abgeschlossen werden

8. Info: Diese SQL-Anweisung anzeigen Aufgrund der begrenzten Länge werden lange SQL-Anweisungen nicht vollständig angezeigt, sie sind jedoch eine wichtige Grundlage für die Beurteilung von Problemanweisungen


Zustandsanalyse häufiger Zustände

1. Schlaf

bedeutet normalerweise, dass die Ressource nicht freigegeben wurde. Wenn sie über einen Verbindungspool erfolgt, sollte der Ruhezustand innerhalb eines bestimmten Bereichs konstant sein, zum Beispiel:

Die Datenabfragezeit beträgt 0,1 Sekunden und die Netzwerkausgabe dauert etwa 1 Sekunde. Die ursprüngliche Datenverbindung kann in 0,1 Sekunden freigegeben werden, da das Front-End Das Programm führt den Schließvorgang nicht aus und gibt die Ergebnisse nicht direkt aus. Die Ergebnisse werden nicht auf dem Desktop des Benutzers angezeigt. Vorher wurde die Datenbankverbindung im Ruhezustand gehalten


2. Gesperrt

Der Vorgang ist gesperrt Auftreten des Sperrstatus


3. In tmp-Tabelle kopieren

Wenn der Index und die vorhandene Struktur die Abfragebedingungen nicht abdecken können, wird eine temporäre Tabelle erstellt, um die Abfrageanforderungen zu erfüllen, was zu einem enormen E/A-Druck führt Normalerweise wird empfohlen, verwandte Abfragen zu reduzieren oder Abfrageanweisungen in diesem Zustand zu optimieren. Bei anderen Vorgängen kann dies zu einer erheblichen Beeinträchtigung führen dieses Mal


4. Daten senden

Das Senden von Daten ist nicht das Senden von Daten, sondern der Prozess des Abrufens von Daten von der physischen Festplatte. Wenn Sie einen großen Impact-Ergebnissatz haben, müssen Sie diese beim Senden aus verschiedenen Festplattenfragmenten extrahieren Es gibt zu viele Datenverbindungen. Normalerweise ist die Auswirkungsergebnismenge einer bestimmten Abfrage zu groß, das heißt, die Indexelemente der Abfrage sind nicht ausreichend optimiert


5. Ergebnis im Abfrage-Cache speichern

Wenn dieser Zustand häufig auftritt, verwenden Sie Set-Profiling Wenn der Overhead-Anteil im gesamten SQL zu groß ist (auch wenn es sich um einen sehr geringen Overhead handelt, sehen Sie sich den Anteil an), bedeutet dies, dass die Abfrage erfolgt Es gibt viele Cache-Fragmente, um den Abfrage-Cache sofort zu bereinigen.

Die oben genannten Details sind MySQL-Analyse-Show PROCESSLIST Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn