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:
|