Seite 1 von 1

MySQL Frage zu Verbindung abgebrochen

Verfasst: 06.05.2011 13:23
von Bisonte
Hallo erstmal ;)

Wenn ein User längere Zeit keine MySQL Anfrage stellt, kappt der MySQL Server die Verbindung.

Mit der libmysql.dll hatte ich das mit mysql_ping() abgefangen.

Macht das IsDatabase() das gleiche ?

Bzw. wenn die Verbindung gekappt wurde hab ich ja immer noch das DB Handle, was ja seitens PB
gültig ist (zumindest hat es ja immer noch einen Wert) .
Prüft das IsDatabase() auch die Verbindung und reconnect im Bedarfsfall ?

Wenn nicht, wie löse ich das ? (Ich möchte ohne externe mitgelieferte dll auskommen)

Re: MySQL Frage zu Verbindung abgebrochen

Verfasst: 06.05.2011 14:40
von Kiffi
ich persönlich baue eine Verbindung zur Datenbank
immer nur im Bedarfsfall auf und schließe sie danach
wieder. Wäre das eine Option für Dich?

Grüße ... Kiffi

Re: MySQL Frage zu Verbindung abgebrochen

Verfasst: 06.05.2011 15:00
von Bisonte
Immer OpenDB und CloseDB nach jedem Query wenn ich dich richtig verstanden habe...

Wäre natürlich eine Möglichkeit, aber würde das nicht zu langsam werden, wenn "gearbeitet" wird ?

Bsp.:
Ich rufe eine Prozedur auf um einen Query abzusenden und die Daten zu erhalten.
Wenn nun der Nutzer 30 Anfragen (Bsp.) macht... sowas in der Art mein ich...

Edit: Aber da fang ich gleich mal an zu messen ;)

Edit2 : Jetzt bin ich verwirrt...
Methode Offene DB braucht bei 100 Anfragen länger als Methode DB Auf und Zu.... (ohne Debugger und gleichem Query)
Unterschied ~ bei 200 ms ...
Das bedarf jetzt aber einer genaueren Betrachtung meinerseits ...

Re: MySQL Frage zu Verbindung abgebrochen

Verfasst: 06.05.2011 15:20
von Kiffi
Bisonte hat geschrieben:Immer OpenDB und CloseDB nach jedem Query wenn ich dich richtig verstanden habe...
naja, nicht nach jedem einzelnen Query. Wenn ein grösserer Block an
DB-Operationen ansteht, kann man den schon in einem Rutsch machen.

Grüße ... Kiffi

Re: MySQL Frage zu Verbindung abgebrochen

Verfasst: 06.05.2011 15:40
von bobobo
Bisonte hat geschrieben: Edit2 : Jetzt bin ich verwirrt...
Methode Offene DB braucht bei 100 Anfragen länger als Methode DB Auf und Zu.... (ohne Debugger und gleichem Query)
Unterschied ~ bei 200 ms ...
Das bedarf jetzt aber einer genaueren Betrachtung meinerseits ...
Methode auf zu entspricht eher einem transaktionsbasiertem Ansatz und ist deshalb flötter

Methode offene Hose wird extrem beschleunigt wenn du das (so möglich)
in eine Transaktion packst. soltle dann nochmal flötter gehen als die AufZu-Gechichte

Re: MySQL Frage zu Verbindung abgebrochen

Verfasst: 06.05.2011 15:40
von shadow
Setz doch einfach in einem Timer ein dummy-SELECT ab. So was wie

Code: Alles auswählen

SELECT 1 FROM systables;
alle 5 - 10 min.

Ansonsten kannst du doch den Verbindungs-Timeout deines Servers einfach erhöhen bzw. ausschalten. Müsstest dann halt abfangen, wenn ein User einfach disconnected wurde...
Die Methode "auf/zu" empfinde ich persönlich nicht als die Funktionalität, weswegen man einen DB-Server nimmt. Eine Dauer-Verbindung entspricht eher einem Server, oder eben ein programmgesteuerter Reconnect nach einem Verbingungsabbruch/-timeout.

Re: MySQL Frage zu Verbindung abgebrochen

Verfasst: 06.05.2011 16:29
von Bisonte
shadow hat geschrieben:Ansonsten kannst du doch den Verbindungs-Timeout deines Servers einfach erhöhen bzw. ausschalten. Müsstest dann halt abfangen, wenn ein User einfach disconnected wurde...
Die Methode "auf/zu" empfinde ich persönlich nicht als die Funktionalität, weswegen man einen DB-Server nimmt. Eine Dauer-Verbindung entspricht eher einem Server, oder eben ein programmgesteuerter Reconnect nach einem Verbingungsabbruch/-timeout.
Also ich programmiere keinen MySQL Server ;)

Ich soll vom Nutzer verlangen, dass er den Admin vom MySQLServer beauftragt den TimeOut zu ändern ?
Ich glaube das ist indiskutabel ;)
oder eben ein programmgesteuerter Reconnect nach einem Verbingungsabbruch/-timeout.
Und wie erkenne ich mit PB Mitteln einen Verbindungsabbruch ohne dass mir das Programm ins Nirwana wandert ?
Das war ja eigentlich die Kernfrage...

Aber die Lösungsvorschläge sind schonmal überlegenswert...
Besonders die Dummy Select Sache... (obwohl das systable nicht genommen werden kann, siehe Zugriffsrechte.)

Re: MySQL Frage zu Verbindung abgebrochen

Verfasst: 06.05.2011 16:59
von SirMatti74
Bisonte hat geschrieben:Besonders die Dummy Select Sache... (obwohl das systable nicht genommen werden kann, siehe Zugriffsrechte.)
Dazu ein Auszug aus der MySQL-Hilfe:
SELECT kann auch verwendet werden, um Datensätze abzurufen, die ohne Referenzierung einer Tabelle berechnet wurden. Zum Beispiel:

Code: Alles auswählen

mysql> SELECT 1 + 1;
        -> 2
Sie können DUAL als Pseudotabellenname in Situationen angeben, in denen keine Tabellen referenziert werden:

Code: Alles auswählen

mysql> SELECT 1 + 1 FROM DUAL;
        -> 2
DUAL ist ausschließlich zum Zweck der Kompatibilität mit anderen Datenbankservern vorhanden, die eine FROM-Klausel erfordern. MySQL benötigt keine solche Klausel, wenn keine Tabellen referenziert werden.