Wenn MySQL zu viel CPU beansprucht, wo sollten wir mit der Optimierung beginnen? Wenn die CPU-Auslastung zu hoch ist, können Sie Folgendes in Betracht ziehen: 1) Abgesehen vom hohen Parallelitätsfaktor müssen Sie im Allgemeinen noch herausfinden, welche SQL-Anweisungen ausgeführt werden, die Ihre CPU-Auslastung erhöhen. Verwenden Sie die Anweisung „show processlist“, um die SQL-Anweisung mit der höchsten Auslastung zu finden und zu optimieren, z. B. um einen Index für ein bestimmtes Feld zu erstellen. 2) Öffnen Sie das langsame Abfrageprotokoll und erklären Sie die SQL-Anweisungen, deren Ausführung zu lange dauert und zu viele Ressourcen beansprucht. Die hohe CPU-Auslastung wird hauptsächlich durch Sortierprobleme bei GroupBy und OrderBy verursacht. Optimieren und verbessern Sie diese dann langsam. Beispielsweise können Sie Insert-Anweisungen, Group-By-Anweisungen, Order-By-Anweisungen, Join-Anweisungen usw. optimieren. 3) Erwägen Sie, Dateien und Indizes regelmäßig zu optimieren; 4) Analysieren Sie die Tabelle regelmäßig und verwenden Sie die Funktion „Tabelle optimieren“. 5) Datenbankobjekte optimieren; 6) Überlegen Sie, ob es sich um ein Schlossproblem handelt. 7) Passen Sie einige MySQL-Serverparameter an, etwa key_buffer_size, table_cache, innodb_buffer_pool_size, innodb_log_file_size usw. 8) Wenn die Datenmenge zu groß ist, können Sie die Verwendung eines MySQL-Clusters oder den Aufbau einer Hochverfügbarkeitsumgebung in Betracht ziehen. 9) Eine hohe CPU-Auslastung der Datenbank kann durch Speicherverriegelung (Speicherleck) verursacht werden. 10) Bei einer hohen Gleichzeitigkeit mehrerer Benutzer kann kein System mithalten. Daher muss ein Cache verwendet werden, entweder Memcached oder Redis Cache. 11) Überprüfen Sie, ob die Größe von tmp_table_size zu klein ist. Wenn möglich, erhöhen Sie sie entsprechend. 12) Wenn max_heap_table_size zu klein konfiguriert ist, erhöhen Sie es ein wenig. 13) Problem mit der Einstellung des Timeout für die Sleep-Verbindung bei MySQL SQL-Anweisungen (wait_timeout) 14) Verwenden Sie „show processlist“, um die Anzahl der MySQL-Verbindungen zu überprüfen und festzustellen, ob sie die von MySQL festgelegte Anzahl von Verbindungen überschreitet. Hier ist ein Fall, den ich erlebt habe: Der Zugriff auf die Website erfolgt während der Stoßzeiten und beim Anklicken der Seiten kommt es zu leichten Verzögerungen. Melden Sie sich beim Server an und stellen Sie fest, dass die Maschinenlast etwas hoch ist und MySQL viele CPU-Ressourcen beansprucht, wie unten gezeigt: Die MySQL-Last bleibt hoch. Wenn die Funktion „Protokoll für langsame Abfragen“ aktiviert ist, besteht die beste Möglichkeit darin, die langsamen SQL-Anweisungen im Protokoll für langsame Abfragen zu optimieren. Wenn die SQL-Anweisungen eine große Anzahl von Group-By-Anweisungen, Union-Abfragen usw. verwenden, steigt die MySQL-Nutzungsrate definitiv an. Sie müssen also die SQL-Anweisung optimieren Zusätzlich zur Optimierung von SQL-Anweisungen können Sie auch einige Konfigurationsoptimierungen durchführen. Führen Sie „show procedureslist“ in mysql aus. Die folgenden Ergebnisse werden angezeigt: 1. Abfrage einer großen Anzahl von Kopien in die temporäre Tabelle auf dem Datenträgerstatus Da die temporäre Tabelle zu groß ist, schreibt MySQL die temporäre Tabelle offensichtlich auf die Festplatte, was die Gesamtleistung beeinträchtigt. Der Standardwert von tmp_table_size in Mysql beträgt nur 16 MB, was in der aktuellen Situation offensichtlich nicht ausreicht. Lösung: Passen Sie die Größe der temporären Tabelle an 1) Geben Sie den MySQL-Terminalbefehl ein, um ihn zu ändern, global hinzuzufügen und er wird wirksam, wenn Sie das nächste Mal MySQL eingeben mysql> setze globale tmp_table_size=33554432; Melden Sie sich erneut bei MySQL an 2) Änderung der Konfigurationsdatei my.cnf [root@www ~]# vim meine.cnf Starten Sie MySQL neu 2. Die Ausgabe des Befehls „show processlist;“ zeigt, welche Threads ausgeführt werden, was bei der Identifizierung problematischer Abfragen helfen kann. Beispielsweise ergeben sich folgende Ergebnisse: Id Benutzer Host db Befehl Zeit Status Info Häufig gestellte Fragen: Im Allgemeinen gibt es zu viele ruhende Verbindungen, die die MySQL-Serverressourcen (hauptsächlich CPU und Speicher) stark beanspruchen und zu einem MySQL-Absturz führen können. Lösung: In der MySQL-Konfigurationsdatei my.cnf gibt es eine Einstellung für den Parameter wait_timeout. Sie können das Timeout für die Verbindung im Ruhezustand in Sekunden festlegen. Wenn eine Verbindung abläuft, wird sie von MySQL automatisch beendet. Das standardmäßige „wait_timeout“ des MySQL-Servers beträgt 28.800 Sekunden oder 8 Stunden. Dies bedeutet, dass MySQL eine Verbindung automatisch trennt, wenn sie länger als 8 Stunden inaktiv ist. Der Verbindungspool geht jedoch davon aus, dass die Verbindung noch gültig ist (da die Gültigkeit der Verbindung nicht überprüft wird). Wenn die Anwendung die Verwendung der Verbindung anfordert, tritt der folgende Fehler auf: Das letzte erfolgreich vom Server empfangene Paket liegt 596.688 Millisekunden zurück. 28800 Sekunden oder 8 Stunden. Wenn die Datenbankverbindung (java.sql.Connection) innerhalb von wait_timeout Sekunden im Wartezustand bleibt, schließt MySQL die Verbindung. Zu diesem Zeitpunkt enthält der Verbindungspool Ihrer Java-Anwendung noch immer einen Verweis auf die Verbindung. Bei Verwendung dieser Verbindung zum Ausführen von Datenbankvorgängen tritt der obige Fehler auf. Beim Überprüfen des MySQL-Handbuchs habe ich festgestellt, dass die Maximalwerte für wait_timeout 24 Tage/365 Tage (Windows/Linux) betragen. Ändern Sie es beispielsweise auf 30 Tage mysql> globales Wait_Timeout = 124800 festlegen; Der obige Artikel zu Optimierungsmethoden, wenn MySQL zu viel CPU-Leistung beansprucht (unbedingt lesen) ist der gesamte Inhalt, den der Herausgeber mit Ihnen teilt. Ich hoffe, er kann Ihnen als Referenz dienen und ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen. Das könnte Sie auch interessieren:
|
<<: WebStorm kann die Lösung der Vue3-kombinierten API nicht korrekt identifizieren
>>: So implementieren Sie einen variablen Ausdrucksselektor in Vue
Die Verwaltung des Speicherplatzes ist für System...
Inhaltsverzeichnis 1. Einleitung 2. Installieren ...
Ich habe online gesucht und festgestellt, dass in...
In diesem Artikelbeispiel wird der spezifische Co...
Eine ausgereifte Datenbankarchitektur ist nicht v...
1. Befehlseinführung Der Dateibefehl wird verwend...
Die Lösungen für die Probleme, die bei der Erstell...
Heute haben wir ein weiteres typisches Problem im...
Inhaltsverzeichnis 1. Kapselungs-API 2. Globale T...
Gespeicherte MySQL-Prozedur 1. Erstellen Sie die ...
Tatsächlich fragen wir uns jeden Tag, wann IE6 wi...
MySQL ist einfach zu installieren, schnell und ve...
1. Im Web unterstützte Bildformate: GIF: kann 256...
Inhaltsverzeichnis 1. Grundlegende Verwendung 2. ...
Während der Verwendung von MySQL wurde festgestel...