Heim > Datenbank > MySQL-Tutorial > Warum läuft meine MySQL-Abfrage nach 60 Sekunden ab, obwohl „wait_timeout' viel höher ist?

Warum läuft meine MySQL-Abfrage nach 60 Sekunden ab, obwohl „wait_timeout' viel höher ist?

Susan Sarandon
Freigeben: 2024-11-27 05:07:13
Original
344 Leute haben es durchsucht

Why is my MySQL query timing out after 60 seconds, even though `wait_timeout` is much higher?

Der MySQL-Server ist verschwunden – 60 Sekunden von dem entfernt, was erwartet wurde.

In diesem Artikel wird erläutert, was dazu geführt hat, dass der MySQL-Server eine Abfrage durchlaufen hat das 120 Sekunden gedauert hat Problem, das nach 60 Sekunden abbricht und einen Fehler auslöst. Obwohl die Abfrage einwandfrei lief, wurde dieser Fehler durch ein Problem im PHP-Skript verursacht.

Problemsymptome

  • Ausführen einer Abfrage über PHP SELECT SLEEP(120); Zeitüberschreitung nach 60 Sekunden.
  • Das Ausführen derselben Abfrage vom MySQL-Client wird erfolgreich ausgeführt.
  • Die Zeitüberschreitung beträgt jedes Mal feste 60 Sekunden, was darauf hindeutet, dass es sich möglicherweise eher um ein Setup-Problem als um eine Ressourcenbeschränkung handelt.

Systemkonfiguration

  • Windows Server 2003
  • MySql 5.1.36-community
  • PHP 5.3

Analyse

Nachdem wir die Ausgabe von SHOW VARIABLES überprüft haben, haben wir festgestellt, dass wait_timeout auf 28800 (480 Minuten) gesetzt wurde, der Fehler jedoch weiterhin besteht. Dies zeigt, dass wait_timeout nicht das Problem ist.

Lösung

Die Ursache des Problems ist die PHP-Option mysql.connect_timeout. Diese Option wird nicht nur für Verbindungs-Timeouts verwendet, sondern auch zum Warten auf die erste Antwort vom Server. Da die Abfragedauer auf 120 Sekunden und mysql.connect_timeout standardmäßig auf 60 Sekunden eingestellt ist, schließt der Server die Verbindung nach 60 Sekunden, was den Fehler verursacht.

Dieses Problem wurde behoben, indem mysql.connect_timeout auf mindestens 120 Sekunden erhöht wurde. Dies wird mit dem folgenden Code erreicht:

ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300); 
Nach dem Login kopieren

Dadurch wird mysql.connect_timeout auf 300 Sekunden erhöht, wodurch vermieden wird, dass die Verbindung vorzeitig geschlossen wird, während auf die Antwort des Servers gewartet wird.

Das obige ist der detaillierte Inhalt vonWarum läuft meine MySQL-Abfrage nach 60 Sekunden ab, obwohl „wait_timeout' viel höher ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage