Client-Timeout

Client-Timeout

am 03.05.2007 15:39:13 von Weinzierl Stefan

Hallo,

ist es sinnvoll den Client-Timeout (wait_timeout) hochzusetzen. Default
scheint ja 8 Stunden zu sein. Handle ich mir dadurch irgendwelche
Probleme ein oder sollte die Applikation lieber alle paar Stunden mal
ein 'SELECT 0' senden?

Stefan

Re: Client-Timeout

am 03.05.2007 20:37:24 von Dominik Echterbruch

Weinzierl Stefan schrieb:
>
> ist es sinnvoll den Client-Timeout (wait_timeout) hochzusetzen. Default
> scheint ja 8 Stunden zu sein. Handle ich mir dadurch irgendwelche
> Probleme ein oder sollte die Applikation lieber alle paar Stunden mal
> ein 'SELECT 0' senden?

Gegenfrage: Ist es sinnvoll, die Verbindung so lange offen zu lassen,
wenn eh nichts passiert? Du kannst ja nicht mal sicher sein, ob der
Server in der Zeit nicht mal eben einen Reload erfährt, was deine
Verbindung ohnehin abbrechen lassen würde. Meist ohne, daß du es merkst.

Der Connect zu einem NySQl Server ist billig (verglichen mit dem, was
für eine Verbindung zu anderen Systemen nötig ist). Warum also nicht
einfach immer dann connect5en, wenn man die Verbindung braucht und
danach wieder trennen?

Grüße,
Dominik

Re: Client-Timeout

am 03.05.2007 21:40:09 von Weinzierl Stefan

Dominik Echterbruch wrote:
> Weinzierl Stefan schrieb:
>>
>> ist es sinnvoll den Client-Timeout (wait_timeout) hochzusetzen. Default
>> scheint ja 8 Stunden zu sein. Handle ich mir dadurch irgendwelche
>> Probleme ein oder sollte die Applikation lieber alle paar Stunden mal
>> ein 'SELECT 0' senden?
>
> Gegenfrage: Ist es sinnvoll, die Verbindung so lange offen zu lassen,
> wenn eh nichts passiert? Du kannst ja nicht mal sicher sein, ob der
> Server in der Zeit nicht mal eben einen Reload erfährt, was deine
> Verbindung ohnehin abbrechen lassen würde. Meist ohne, daß du es merkst.

Hintergrund: An dem Server hängen Fertigungsautomaten und wenn die am
Freitag nicht abgeschaltet werden ist eben am Montag die Verbindung weg...

> Der Connect zu einem NySQl Server ist billig (verglichen mit dem, was
> für eine Verbindung zu anderen Systemen nötig ist). Warum also nicht
> einfach immer dann connect5en, wenn man die Verbindung braucht und
> danach wieder trennen?
Ich habe leider keinen Zugriff auf den Code und kann dem Programmierer
nur auf solche Sachen hinweisen, deswegen habe ich ein paar Argumente
zum vorbringen gesucht.

> Grüße,
> Dominik

Danke,
Stefan

Re: Client-Timeout

am 03.05.2007 22:35:33 von Axel Schwenke

Weinzierl Stefan wrote:
> Dominik Echterbruch wrote:
>> Weinzierl Stefan schrieb:
>>>
>>> ist es sinnvoll den Client-Timeout (wait_timeout) hochzusetzen. Default
>>> scheint ja 8 Stunden zu sein. Handle ich mir dadurch irgendwelche
>>> Probleme ein oder sollte die Applikation lieber alle paar Stunden mal
>>> ein 'SELECT 0' senden?
>>
>> Gegenfrage: Ist es sinnvoll, die Verbindung so lange offen zu lassen,
>> wenn eh nichts passiert? Du kannst ja nicht mal sicher sein, ob der
>> Server in der Zeit nicht mal eben einen Reload erfährt, was deine
>> Verbindung ohnehin abbrechen lassen würde. Meist ohne, daß du es merkst.
>
> Hintergrund: An dem Server hängen Fertigungsautomaten und wenn die am
> Freitag nicht abgeschaltet werden ist eben am Montag die Verbindung weg...

Wenn das Software in einem Fertigungsautomaten ist, dann sollte die
so robust sein, daß sie eine verloren gegangene MySQL-Verbindung neu
aufbaut. Nennt sich defensive Programmierung.

>> Der Connect zu einem NySQl Server ist billig (verglichen mit dem, was
>> für eine Verbindung zu anderen Systemen nötig ist). Warum also nicht
>> einfach immer dann connect5en, wenn man die Verbindung braucht und
>> danach wieder trennen?

> Ich habe leider keinen Zugriff auf den Code und kann dem Programmierer
> nur auf solche Sachen hinweisen, deswegen habe ich ein paar Argumente
> zum vorbringen gesucht.

Eine offene MySQL-Connection blockiert einen Server-Thread, einige paar
bis einige viele MB RAM auf dem Server (abhängig von der Konfiguration)
und eine der erlaubten Verbindungen (max_connections & Freunde). Wenn
die Verbindung LOCKs hält oder temporäre Tabellen, kann das beliebig
weit nach hinten losgehen.

Außerdem ist es extrem schlechter Stil, nicht benötigte Ressourcen
nicht freizugeben. Die sauberste Lösung dürfte allemal sein, die MySQL-
Verbindung seitens der Applikation zu schließen, wenn klar ist daß man
die Datenbank auf absehbare Zeit nicht braucht. Wenn das nicht geht,
bietet das MySQL-API die mysql_ping() Methode, die eine Art keepalive
Paket an den Server schickt und auch die Timeout-Zähler zurücksetzt.
Und wenn automatisches Reconnect konfiguriert ist, wird sogar
automatisch neu verbunden, falls die Verbindung weg war.


XL