Thread Timeout für mysql-Statements (5 answers)
Opened by pq at 2011-01-25 12:20

pq
 2011-01-25 12:20
#144997 #144997
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Ich habe ein Problem mit einem Script, das alle 5 Minuten mit DBI ein select auf eine bestimmte Tabelle macht. Es wird von munin gestartet.

Das Problem tritt auf, wenn mysql z.b. Tabellen checken muss (das passiert zwar nur, wenn der Rechner nicht ordentlich runtergefahren wird, das wiederum passiert hier aufgrund der Stromleitungen häufiger).
Die Tabellen sind sehr gross (auch die, die ich im Script auslesen will), so dass sehr lange gecheckt wird.
Bis dahin muss das Statement aus meinem Script warten. Da es alle 5 Minuten aufgerufen wird, sammeln sich so jede Menge wartende Statements an, und es scheint so, als ob die Scripte irgendwann abgebrochen werden von munin, aber die Statements selber sind noch da und füllen anscheinend auch die Liste der offenen Connections, und irgendwann ist die maximale Anzahl der Connections erreicht.

So, lange Rede, kurzer Sinn:
Ich frage mich, ob es irgendeine Methode gibt, das Statement per Script abzubrechen. Das einzige, was mir momentan noch einfällt, wäre, per "show processlist" vorher nachzusehen und dieses Statement vorher zu killen, bevor ich ein neues starte.
Schön wäre aber, wenn ich einfach sagen könnte, wenn das Script stirbt (z.b. mittels alarm()), soll auch das Statement mitgekillt werden, das ich abgesetzt habe.

Habe mehrere alarm()-Varianten aus der DBI-Doku ausprobiert (und mittels eines LOCK TABLE simuliert), die aber alle nicht das Statement beenden.

Mein nächster Workaround wird sein, ein Lockfile anzulegen, das nicht freigegeben wird, wenn das Script stirbt, so dass der nächste Prozess erst gar keine Datenbankverbindung startet. Aber schön finde ich das irgendwie nicht. Scheint irgendwie nicht anders lösbar zu sein, aber vielleicht hat ja jemand Erfahrung damit und eine Idee.

edit: typos
Last edited: 2011-01-25 12:22:05 +0100 (CET)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Timeout für mysql-Statements