SQLite/Logging.db

Hallo,

Fasziniert ab der neuen Logging-Funktion habe ich diese natürlich gleich ausprobiert.

Folgendes habe ich festgestellt:
Eine Variable wird mitgeloggt. Bei einer Variablenänderung wird ein Skript ausgelöst, welches die Datenbank ausliest (z.B. für Min/Max-Werte, Trend usw.).

Es kommt nun vor, dass beim Auslesen durch das Skript die Datenbank gesperrt wird, IPS aber kurz darauf die Daten aggregieren will - dies misslingt, da die DB ja „locked“ ist (meine Interpretation).

Wäre es möglich, das Skript erst nach vollständiger DB-Verarbeitung auszulösen oder mit Semaphore zu arbeiten?

Gruss

hightower

dies misslingt

Da ist es noch nicht ausprobiert hatte… Wie muss ich mir misslingt vorstellen? Gibt es eine Fehlermeldung im Log?

paresy

Folgende Fehlermeldung erscheint:

Error executing SQL statement.
Error [5]: The database file is locked.
"UPDATE ips_float SET status=1, duration="3" WHERE status=0 AND varid="34288"": database is locked

Ich hatte gerade Probleme, dies zu reproduzieren - scheint sich um Millisekunden zu handeln. Dafür ist bei einem neuen Maxwert manchmal die Datenbank aktuell und manchmal nicht (je nach Skriptdauer).

Das ist ein generelles Problem von SQLite, mehrere Thread können nicht auf die gleiche Datei zugreifen. Das ist unter anderem ein Grund, warum ich z.B. das Logging gerne in einer MySQL-Datenbank hätte. Hier wären mehrere Zugriffe auch schreibend, von mehreren PCs im Netzwerk kein Problem.