MySQL Problem, server has gone away

scrippi

Grünschnabel
Guten Tag gemeinde,

ich habe folgendes Problem.

Ich öffne eine Datenbankverbindung über mysql_pconnect für einen Multithreaded Eventhandler, der ganz schön viel zutun hat. Ab und zu schmiert die aber ab, was ich sher suboptimal finde, da es innerhalb eines Prozesses zu gravierenden Fehlern führen kann.

Ich hatte gehofft, dass die Lösung pconnect zu verwenden mir ein wenig helfen wird, da PHP vom Konzept her ja eigentlich nicht auf Arbeit mit Threads ausgelegt ist, zu mal die Klasse Thread eine eigene Klasse ist, welche auf die Funktionen pcnt und posix zugreift.

Frage: Was kann man dagegen unternehmen, dass die Verbindung andauernd weg fliegt?

Sollte ich MySQLi statt MySQL verwenden? Liegt es möglicherweise daran, dass ich eine Taktung von 10000 Mikrosekunden bei usleep habe, ehe eine Abfrage erstellt wird?(Eigentlich nicht, solange er nur die events abfragt, läuft ja auch alles, nur wenn mehrere Prozesse parallel arbeiten kommt es manchmal zu sowas)

Würde mich sehr über einen Rat freuen.


MfG
scrippi
 
Hi,

hab auf die schnelle mal ne Seite im Handbuch zum MySQL gefunden, eventuell hilft dir das weiter:
http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

Wenn du mit Threads arbeitest, ist deine MySQL-Verbindung auch so ausgelegt, dass eine Abfrage nach der anderen raus geht und nicht mehrere parallel?

In MySQL gibt es auch eine Einstellung in der du die maximale Anzahl an Queries / Benutzer und Stunde einstellen kannst. Eventuell wird dieser Wert überschritten?

Gruß
BK
 
Zuletzt bearbeitet:
Hallo,

es könnte auch daran liegen das die Datenmenge zu groß ist die du an den Server schickst.
Ich hatte auch mal dieses Problem, nachdem ich die Querys verkleinert hatte ging es.

Gruß Napofis
 
@Bratkartoffel: Das Problem ist ja, gerade WEGEN den Threads, kann es dazu kommen dass parellele Abfragen passieren. Habe den Mainthread der permanent sich über eine Abfrage Events in die Liste zieht und für jeden Event wird dann ein Thread gestartet, der den abarbeiten soll.

Habe den "Eventquery" der aus 3 UNIONs besteht mal in ein View gepackt so dass ich nur noch "SELECT *FROM v_events" aufrufe.

Auch habe ich die Taktung von 0.01 Sekunden auf 0.1 runtergesetzt, was aber absolut ausreichend ist. Dadurch wurde es auch ein bisschen besser
 
Arbeitest du mit Prepared Statements? Evtl. ist das noch ein Performance-Loch, also ohne PS. Hast du schon mal darüber nach gedacht, Stored Procedures zu verwenden?
 
Zurück