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

Ansehen: 33231|Antwort: 6

[Quelle] MySQL analysiert hohe CPU-Nutzung in Situationen mit hoher Nebenläufigkeit

[Link kopieren]
Veröffentlicht am 05.09.2017 20:23:59 | | | |


In letzter Zeit ist aus verschiedenen Gründen die Zahl der Website-Besuche stark gestiegen, und aus der Figur geht hervor, dass die Zahl der gleichzeitigen Verbindungen über 1.200 liegt

Weil die Serverkonfiguration sehr niedrig ist, 1 Kern und 2G-Speicher, und die Website bei vielen Leuten sehr langsam zugänglich ist.


Wir verwenden den Top-Befehl, um das zu überprüfen, MySQL beansprucht viel CPU und Speicher, und andere Prozesse sind php-fpm, was CPU und Speicher beansprucht, was nicht sehr hoch ist

Wenn MySQL normal läuft, führen einige SQL-Anweisungen in PHP dazu, dass Probleme entdeckt werden, und der Root-Benutzer geht in das MySQL-Management ein
mysql -u root -p
Gib das Passwort ein und dann den folgenden Befehl




Mit diesem Befehl sehen wir, dass die Datenbank ständig Löschoperationen mit where-Bedingungen ausführt.



pre_k_spider dieser Tabelle ist eine Tabelle, die Spider-Zugriffe aufzeichnet, vermutlich verursacht durch ein installiertes Plugin

Wir sehen, dass pre_k_spider Tabelle mehr als 100.000 Datensätze enthält und die Abfrage 33 Sekunden benötigt



Räumen Sie diese Tabelle entschlossen und gehen Sie dann in den Verwaltungshintergrund, um die entsprechenden Plug-ins der Tabelle zu schließen und sie auf Normalzustand zurückzusetzen!









Vorhergehend:Alibaba Cloud Cloud Marktplatz Verifizierungscode-Erkennungsdienst
Nächster:MySQL 5.6.21, um die MY.CNF-Konfigurationsdatei anzusehen
 Vermieter| Veröffentlicht am 06.09.2017 09:32:56 |


Heute hängt die Website wieder fest, und es wird eine große Anzahl von Schlafen gefunden

Ursachen des Schlafs:

1 Das Client-Programm rief mysql_close() vor dem Beenden nicht auf.

2 Der Client hatte mehr als wait_timeout oder interactive_timeout Sekunden geschlafen, ohne Anfragen an den Server zu richten.

3 Das Client-Programm endete abrupt mitten in einer Datenübertragung

Wenn die Anzahl der Schlafprozesse im gleichen Zeitraum zu hoch ist und die Gesamtzahl der Verbindungen in anderen Zuständen den Wert max_connection übersteigt, kann MySQL keine Anfragen mehr außer dem Root-Benutzer verarbeiten, keine Verbindung zu irgendeiner Anfrage herstellen oder hängt direkt

Lösung:

1. Erstens, prüfen Sie, ob Ihr Programm die pconnect-Methode verwendet, und zweitens, ob die mysql_close() rechtzeitig vor der Ausführung der Seite aufgerufen wird. Versuche, nicht die Pconnect-Methode zu verwenden, also mysql_connect zu verwenden. Wenn das Programm ausgeführt wird, sollte das mysql_close explizit aufgerufen werden

2. Füge wait_timeout und interactive_timeout zu my.cnf hinzu, setze den Wert kleiner, standardmäßig beträgt der wait_timeout Wert 8 Stunden, du kannst ihn auf 1 Stunde oder eine halbe Stunde ändern. So tötet MySQL die toten Verbindungen schneller. Verhindern Sie, dass die Gesamtzahl der Verbindungen den Wert max_connection überschreitet.

wait_timeout zu groß ist, führt dazu, dass viele SLEEP-Prozesse in MySQL mit der Zeit freigegeben werden, was die Systemleistung sinkt, aber wenn die Einstellungen zu klein sind, können Probleme wie "MySQL ist verschwunden" auftreten.

Setze den max_connection Wert auf einen höheren Wert, aber das ist offensichtlich nicht angemessen, je mehr Verbindungen du hast, desto mehr Belastung für deinen Server. Tatsächlich sind diese Verbindungen redundant, und sie so schnell wie möglich zu beenden, ist die beste Politik.

3. Analysieren Sie die SQL-Abfrage des Systems Schritt für Schritt, finden Sie das zu langsame SQL und optimieren Sie es



1)interactive_timeout:
Parameterbedeutung: Die Anzahl der Sekunden, die der Server auf eine Aktivität wartet, bevor er die interaktive Verbindung abschaltet. Ein interaktiver Client ist definiert als ein Client, der CLIENT_INTERACTIVE Option in mysql_real_connect() verwendet.
Standardparameter: 28800 Sekunden (8 Stunden)

(2)wait_timeout:
Parameterbedeutung: Die Anzahl der Sekunden, in denen der Server auf Aktivität wartet, bevor die nicht-interaktive Verbindung geschlossen wird.
Wenn der Thread startet, wird der Wert der Sitzung wait_timeout basierend auf dem globalen wait_timeout oder dem globalen interactive_timeout-Wert initialisiert, abhängig vom Client-Typ (definiert CLIENT_INTERACTIVE den Verbindungsoptionen von mysql_real_connect()).
Standardparameter: 28800 Sekunden (8 Stunden)

Es gibt eine obere Obergrenze für die maximale Anzahl der Verbindungen, die MySQL Server unterstützen kann, da jede Verbindung hergestellt wird und Speicher verbraucht, daher erwarten wir, dass die Clients nach der Verbindung zum MySQL Server den belegten Speicher trennen und freisetzen, um die entsprechende Operation zu übernehmen. Wenn Ihr MySQL Server eine große Anzahl von Idle-Verbindungen hat, verbrauchen diese nicht nur umsonst Speicher, sondern wenn sich die Verbindungen weiter ansammeln und öffnen, erreichen sie schließlich die maximale Anzahl an Verbindungen im MySQL Server, was den Fehler 'zu viele Verbindungen' meldet. Die Wertsetzung der wait_timeout sollte anhand des Betriebs des Systems beurteilt werden. Nachdem das System eine gewisse Zeit läuft, können Sie den Verbindungsstatus des aktuellen Systems über den Befehl "Show Processlist" überprüfen. Wenn Sie eine große Anzahl verbundener Prozesse im Schlafzustand finden, bedeutet das, dass die Parametereinstellung zu groß ist, und Sie können entsprechende Anpassungen vornehmen, um kleinere Anpassungen vorzunehmen.


SQL-Befehl:



Diese Modifikationsmethode ist inNach Neustart des MySQL-Dienstes ist er ungültig, daher ist es am besten, diese beiden Eigenschaften in der MySQL-Konfigurationsdatei zu konfigurieren.

Ändern Sie die my.cnf-Datei unter Linux:




Veröffentlicht am 06.09.2017 11:15:15 |
Ich muss einen Master-Slave-Server besorgen
 Vermieter| Veröffentlicht am 06.09.2017 11:15:49 |
Vrchary veröffentlichte am 06.09.2017 um 11:15 Uhr
Ich muss einen Master-Slave-Server besorgen

Serverkonfigurationsgrund Die Konfiguration ist niedrig   
 Vermieter| Veröffentlicht am 06.09.2017 13:47:56 |
Das Problem gelöst, dass "mysql-bin.000001" viel Speicherplatz einnimmt
http://www.itsvse.com/thread-2694-1-1.html
(Quelle: Architekt)

Nachdem ich MySQL mit Ports installiert hatte, stellte ich nach einer Weile fest, dass der /var-Speicherplatz nicht ausreichte, ich überprüfte und stellte fest, dass mysql-bin.000001, mysql-bin.000002 und andere Dateien Speicherplatz beanspruchten – wofür sind diese Dateien also da? Dies ist das Operationsprotokoll der Datenbank, zum Beispiel UPDATE a table oder DELETE einige Daten; selbst wenn die Anweisung nicht mit den Daten übereinstimmt, wird dieser Befehl in der Logdatei gespeichert, einschließlich der Ausführungszeit jeder Anweisung, die ebenfalls aufgezeichnet wird.

Dies geschieht hauptsächlich für die folgenden zwei Zwecke:
1: Datenrettung
Wenn deine Datenbank ein Problem hat und du vorher ein Backup hast, kannst du dir die Logdatei ansehen, um herauszufinden, welcher Befehl dein Datenbankproblem verursacht hat, und einen Weg finden, den Verlust wiederherzustellen.
2: Daten zwischen Master-Slave-Servern synchronisieren
Alle Operationen auf dem Hauptserver werden in einem Protokoll festgehalten, das der Slave-Server verwenden kann, um sicherzustellen, dass beide Systeme synchronisiert sind.

Schließen Sie einfach das Protokoll


 Vermieter| Veröffentlicht am 09.10.2017 14:33:30 |
mysqld ist zu sehr CPU-belegt Windows unten



Lösung: Optimieren Sie die SQL-Anweisung
Veröffentlicht am 30.12.2021 23:15:36 |
Unterstütze es!!!!!!!!!!!!!!!!
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