[Solved] WAIT_TIMEOUT (War: Bekannte Probleme mit mySQL)

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

[Solved] WAIT_TIMEOUT (War: Bekannte Probleme mit mySQL)

Beitrag von Scotty »

Ich benutze eine mySQL-Datenbank v5.0.? auf die ein eigener Server täglich im etwa vierstelligen Bereich zugreift. Die Datenmenge ist relativ gering; es geht nur um die Verwaltung von angemeldeten Nutzern. Alles läuft monatelang stabil, und dann kommt irgendwann, unregelmäßig ein "mySQL has gone away" und ich muss den Server neu starten. Gibt es ein bekanntes Problem mit der Datenbank, für das ich einen Workaround schreiben könnte?

Ich benutze Mysql50conn, sqldb, db und ein Aufruf sieht z.B. so aus:

Code: Alles auswählen

      Query.Active:=false;
      Query.SQL.Text := 'SELECT * FROM Users WHERE Name="'+aRecvMsg.Receiver+'"';
      Query.Active:=true;
      Query.First;
      if Query.RecordCount>0 then ....
 
PS: Mir ist klar, dass die Frage sehr allgemein gestellt ist ;-).
Zuletzt geändert von Scotty am Di 10. Dez 2013, 12:40, insgesamt 1-mal geändert.

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Bekannte Probleme mit mySQL

Beitrag von baba »


Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Bekannte Probleme mit mySQL

Beitrag von Scotty »

Den timeout hatte ich schon mal deutlich erhöht, auf wie viel genau weiß ich gerade nicht (und komme von hier aus auch nicht drauf). Wahrscheinlich auf das Maximum.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Bekannte Probleme mit mySQL

Beitrag von Scotty »

Hm, scheinbar hatte ich den timeout doch nicht richtig gesetzt. Jedenfalls steht unter phpmyadmin "wait timeout 28,800" und auf der Konsole bekomme ich:

mysql> SHOW VARIABLES LIKE 'wait%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 86400 |
+---------------+-------+
1 row in set (0.00 sec)

Sind das unterschiedliche Instanzen? Wenn ich den Befehl "SET @@wait_timeout=86400;" abschicke, dann gibt es in der Konsole "Query OK, 0 rows affected (0.00 sec)" und im Browser gar nichts (er springt auf die Startseite). Die 86400 habe ich mittlerweile auch in die cfg eingetragen - vielleicht bekomme ich den Wert dort her...

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: Bekannte Probleme mit mySQL

Beitrag von Thomas B. »

Wenn ich mich richtig erinnere, ist der Timeout-Wert spezifisch für jede Verbindung und kann Client-seitig gesetzt werden, z.B.

Code: Alles auswählen

fSQLQuery.SQL.Text := 'SET wait_timeout=2147483';
fSQLQuery.ExecSQL; 
...so steht's bei mir im Code

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Bekannte Probleme mit mySQL

Beitrag von Scotty »

Thomas B. hat geschrieben:

Code: Alles auswählen

fSQLQuery.SQL.Text := 'SET wait_timeout=2147483';
fSQLQuery.ExecSQL; 
Das klingt noch besser. Besten Dank!

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Bekannte Probleme mit mySQL

Beitrag von carli »

Schade, dass die Freepascal-Header für mySQL die Escaping/Quoting-Funktionen nicht mit exportieren, da diese mit varargs arbeiten. Ansonsten könnte man mit Lazarus auch mal kommerzielle Programme schreiben, die mySQL benutzen. (Und die RTTI-Komponenten funktionieren nicht, weshalb ich dann doch lieber 'ne Web-App mit Angular.js baue)

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Bekannte Probleme mit mySQL

Beitrag von Scotty »

Da auf die Schnelle mein Code mit der Änderung nicht mehr lauffähig war (was nicht vom SQL Statement abhängt), habe ich per

Code: Alles auswählen

SET GLOBAL WAIT_TIMEOUT=86400;
den Wert in der Konsole auf 24h hoch gesetzt. Das heißt also, dass per "set @@wait_timeout" nur der eine Prozess beeinflusst wird und "global" offensichtlich auf alle wirkt. Danke für eure Hinweise.

Antworten