MySQL Frage zu Verbindung abgebrochen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

MySQL Frage zu Verbindung abgebrochen

Beitrag 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)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: MySQL Frage zu Verbindung abgebrochen

Beitrag 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
a²+b²=mc²
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: MySQL Frage zu Verbindung abgebrochen

Beitrag 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 ...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: MySQL Frage zu Verbindung abgebrochen

Beitrag 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
a²+b²=mc²
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: MySQL Frage zu Verbindung abgebrochen

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

Re: MySQL Frage zu Verbindung abgebrochen

Beitrag 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.
ThinkPad T61 (in Gedenken) | PureBasic 4.61 B1 (32) | Windows 7 (32SP1) | ArchLinux (32) | Syllable (32)
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: MySQL Frage zu Verbindung abgebrochen

Beitrag 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.)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
SirMatti74
Beiträge: 37
Registriert: 08.11.2009 09:12

Re: MySQL Frage zu Verbindung abgebrochen

Beitrag 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.
Antworten