Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 15232|Antwort: 3

[Quelle] MySQL CPU 100% High Solution

[Link kopieren]
Veröffentlicht am 11.10.2018 11:20:31 | | | |
Öffne den Server-Task-Manager und stellst fest, dass der CPU-Prozess immer 99 % war und die Ansicht vom MySQL-Prozess belegt ist, der bisher hoch war.


Die Ausgabe des Processlist-Befehls zeigt an, welche Threads laufen, und du kannst den aktuellen Betriebsstatus der Datenbank überprüfen.

1. Gehe ins mysql/bin-Verzeichnis und gib mysqladmin-Prozessliste ein;
2. Starte MySQL und gib die Prozessliste anzeigen.
Wenn du SUPER-Berechtigung hast, kannst du alle Threads sehen, ansonsten kannst du nur die Threads deines Accounts sehen.





Bedeutung und Zweck jeder Spalte

id: Ein Identifikator
user: zeigt den aktuellen Benutzer an; wenn er nicht root ist, zeigt dieser Befehl nur SQL-Anweisungen innerhalb Ihrer Berechtigungen an.
host: zeigt an, von welcher IP diese Anweisung von welchem Port stammt
db: Zeigt die Datenbank an, mit der der Prozess derzeit verbunden ist.
Befehl: Zeigt die von der aktuellen Verbindung ausgeführten Befehle an, üblicherweise Schlafmodus, Abfrage und Verbindung.
Zeit: Die Zeit, die dieser Zustand dauert, in Sekunden.
Zustand: Zeigt den Status der SQL-Anweisung an, die die aktuelle Verbindung verwendet, aber nur ein bestimmter Zustand in der Ausführung der Anweisung, eine SQL-Anweisung, wurde abgefragt, zum Beispiel muss sie möglicherweise durch das Kopieren in die tmp-Tabelle, Sortierergebnis, Daten senden usw.
Info: Zeigt diese SQL-Anweisung an, da die Länge begrenzt ist, sodass die lange SQL-Anweisung nicht vollständig angezeigt wird, aber sie ist eine wichtige Grundlage zur Beurteilung der Problemstellung.


Es stellt sich heraus, dass es zwei SQL-Abfrageanweisungen gibt, die am längsten dauern und nicht länger als 1000 Sekunden ausgeführt wurden, und die SQL-Anweisungen, die wir aus dem Infofeld kopiert haben, sind eine gemeinsame Abfrage, wie folgt:

Wählen Sie cast (count(*) als SIGNED) als col_0_0_ aus 'RatedPassenger' ratedpasse0_, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_, wo baseinfoco1_. CompanyId=ratedpasse0_. CompanyId und ordermatch2_. OrderId=ratedpasse0_. OrderId

Wir beenden den Prozess dieser beiden Abfrageansagen

Nach 10 Sekunden Warten stellte ich fest, dass die CPU stark abgebrochen war, aber sie war immer noch sehr hoch, und ich werde weiterhin nach dem Grund fragen!



Für die join joint query-Anweisung fügen Sie dem zugehörigen Feld einen Index hinzu oder ändern Sie den Programmabfragecode.
Erstellen Sie eine SQL-Index-Anweisung

Ende





Vorhergehend:C#-Login bei Wordpress
Nächster:Modifiziere die Methode der Portzuordnung für Docker-Container
 Vermieter| Veröffentlicht am 11.10.2018 13:03:02 |
Der kritischste dieser Befehle ist die Zustandsspalte, und die in MySQL aufgeführten Zustände sind hauptsächlich wie folgt:

Prüftisch  
  Ich prüfe das Datenblatt (das ist automatisch).  
  Abschlusstabellen  
  Die in der Tabelle geänderten Daten werden auf die Festplatte zurückgeführt, und die bereits verbrauchte Tabelle wird geschlossen. Das ist ein schneller Vorgang, falls nicht, solltest du prüfen, ob der Speicherplatz voll ist oder ob die Festplatte belastet ist.  
  Verbinden Sie sich  
  Der Replikations-Slave-Server verbindet sich mit dem primären Server.  
  Kopieren in die tmp-Tabelle auf der Festplatte  
  Da die temporäre Ergebnismenge größer als tmp_table_size ist, wird die temporäre Tabelle vom Speicher in den Festplattenspeicher umgewandelt, um Speicher zu sparen.  
  Erstellung einer tmp-Tabelle  
  Eine temporäre Tabelle wird erstellt, um einige der Abfrageergebnisse zu speichern.  
  Löschen aus der Haupttabelle  
  Der Server führt den ersten Teil einer Multi-Table-Löschung durch und hat gerade die erste Tabelle gelöscht.  
  Löschen aus Referenztabellen  
  Der Server führt den zweiten Teil der Multi-Table-Löschung durch, nämlich das Löschen von Datensätzen aus anderen Tabellen.  
  Flushing-Tabellen  
  Ich mache die FLUSH TABLES und warte darauf, dass andere Threads die Datentabelle schließen.  
  Getötet  
  Wenn eine Kill-Anfrage an einen Thread gesendet wird, überprüft der Thread die Kill-Flagge und gibt die nächste Kill-Anfrage auf. MySQL prüft in jeder Hauptschleife auf Kill-Flags, obwohl der Thread in manchen Fällen für kurze Zeit aussterben kann. Wenn der Thread von einem anderen Thread gesperrt wird, tritt die Kill-Anfrage sofort in Kraft, sobald die Sperre aufgehoben wird.  
  Abgeschlossen  
  Von anderen Anfragen gesperrt.  
  Daten senden  
  Der Datensatz der SELECT-Abfrage wird verarbeitet, während die Ergebnisse an den Client gesendet werden.  
  Sortierung nach Gruppe  
  Sortiere für GRUPPE NACH.  
  Sortieren nach Ordnung  
  Die Sortierung erfolgt für ORDER BY.  
  Eröffnungstische  
  Dieser Prozess sollte schnell ablaufen, sofern nicht andere Faktoren ihn behindern. Zum Beispiel kann eine Datentabelle von einem anderen Thread nicht geöffnet werden, bis die ALTER TABLE- oder LOCK TABLE-Anweisung ausgeführt wurde. Ich versuche, einen Tisch zu öffnen.  
  Entfernen von Duplikaten  
  Eine SELECT DISTINCT Abfrage wird ausgeführt, aber MySQL kann die doppelten Datensätze in der vorherigen Stufe nicht optimieren. Daher muss MySQL die doppelten Datensätze erneut entfernen, bevor die Ergebnisse an den Client gesendet werden.  
  Wiedereröffnungstabelle  
  Eine Sperre auf einer Tabelle wird erreicht, muss jedoch nach der Änderung der Tabellenstruktur geändert werden. Ich habe das Schloss bereits freigegeben, das Datenblatt geschlossen und versucht, die Datentabelle wieder zu öffnen.  
  Reparatur durch Sortieren  
  Die Fix-Instruktion sortiert, um einen Index zu erstellen.  
  Reparatur mit Keycache  
  Die Fix-Direktive verwendet den Index-Cache, um neue Indizes nacheinander zu erstellen. Es wird langsamer sein als Reparatur durch Sortieren.  
  Suche in Zeilen nach einem Update  
  Berechtigte Unterlagen werden für Aktualisierungen identifiziert. Dies muss erledigt werden, bevor das UPDATE den relevanten Datensatz ändert.  
  Schlafen  
  Ich warte darauf, dass der Kunde eine neue Anfrage sendet.  
  Systemsperre  
  Warte darauf, eine externe Systemsperre zu erhalten. Wenn keine Mysqld-Server gleichzeitig laufen, die dieselbe Tabelle anfordern, können externe Systemsperren durch Hinzufügen des –skip-external-locking-Parameters verboten werden.  
  Aufrüstung der Schleuse  
  INSERT DELAYED versucht, eine Sperrtabelle dazu zu bringen, einen neuen Datensatz einzufügen.  
  Aktualisierung  
  Suche nach passenden Datensätzen und modifiziere sie.  
  Benutzersperre  
  wartet auf GET_LOCK().  
  Tischbedienung  
  Der Thread wurde darüber informiert, dass die Datenblattstruktur geändert wurde und neu geöffnet werden musste, um die neue Struktur zu erhalten. Um die Datentabelle wieder zu öffnen, müssen Sie dann warten, bis alle anderen Threads die Tabelle geschlossen haben. Diese Benachrichtigung erfolgt in folgenden Fällen: TABELLEN tbl_name FLUSH, TABELLE ÄNDERN, TABELLE UMBENENNEN, REPARATURTABELLE, TABELLE ANALYSIEREN oder TABELLE OPTIMIEREN.  
  Wartet auf den Handler-Einsatz  
  INSERT DELAYED hat alle ausstehenden Einsätze verarbeitet und wartet auf eine neue Anfrage.  
  Die meisten Zustände entsprechen schnellen Operationen; solange ein Thread einige Sekunden im gleichen Zustand bleibt, kann ein Problem auftreten, das überprüft werden muss.
 Vermieter| Veröffentlicht am 01.03.2019 10:26:49 |
 Vermieter| Veröffentlicht am 01.03.2019 10:34:13 |


Es dauert 10 Sekunden, ein Datenstück abzufragen.
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com