93_DbLog - Umstellung Log-Funktion auf non-blocking

Begonnen von DS_Starter, 18 Dezember 2016, 20:03:56

Vorheriges Thema - Nächstes Thema

ioT4db

Hallo Heiko,
kurze Rückmeldung: alles stabil und ohne Fehler bei mir seit dem letzten Update...
VG...
FHEM auf Synology mittels Docker,  Jeelink-Clone 1x für PCA301 und 1x für Lacrosse, THZ304SOL, Homematic: CUL_HM / M-MOD-RPI-PCB, Pushover, Xiaomi s50

ioT4db

Zitat von: JoeALLb am 29 Januar 2017, 21:04:54
Und wie lange dauert es? du könntest zum Start des backups cacheInterval hochdrehen und danach noch einen commitCache machen.

Vielleicht aber schaffen wirs noch eine non-blocking backupfunktion mit in das modul zu integrieren.... dann müsstest du halt haperbackup umkonfigurieren...

Hi Joe,
momentan dauert es ca. 4-5 Minuten. Die Fehlermeldungen haben sich auf 1-2 pro Nacht reduziert, manchmal sehe ich gar keine Fehler. Das ist absolut verschmerzbar! das Hochsetzen des cachIntervals (ich vermute Du meinst mit nem DOIF o.ä.) behalte ich mal im Hinterkopf. Aber wie gesagt, da drückt mir der Schuh im Moment zu wenig - hab noch einige andere Baustellen. Vlt. gibt es da in den nächsten Monaten auch noch Modul-interne Lösung ala backup-funktion oder so...
VG...
FHEM auf Synology mittels Docker,  Jeelink-Clone 1x für PCA301 und 1x für Lacrosse, THZ304SOL, Homematic: CUL_HM / M-MOD-RPI-PCB, Pushover, Xiaomi s50

Sunny

Moin Heiko,

War Heute morgen wohl noch nicht ganz wach....
Habe Deine Antwort leider übersehen.  :-[
Werde Deine Version noch testen und Dir, dann die Ergebnisse zukommen lassen.
Habe heute noch einiges auf dem Zettel. Danke für Deine schnelle Reaktion.

LG
sunny
FHEM 6.0 (RPi's 1b-4,CeleronM,Odroid C1+)
1-Wire (DS18B20,DS2406) |miniCUL|miniCUL868WLAN|HM|IT(-1500,LR-3500) |FB6591,FB7490,FB7580|DECT200|Powerline546E|520E|openwrt
Anfänger: Linux,FHEM+Perl

Amenophis86

Ich weiß zwar nicht warum, aber reduceLog scheint bei mir nicht zu funktionieren.

Ich habe auf einer zweiten FHEM Instanz DBLog laufen, welche nur reduceLog regelmäßig ausführt, da dies FHEM ja blockiert. Dachte bisher zumindest immer, dass es ausgeführt wird. Aber nun sehe ich, dass es zwar ausgeführt wird, aber nichts reduziert. Hier mal ein List des Device:

Internals:
   CFGFN
   COLUMNS    field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
   CONFIGURATION /opt/fhem-zwei/FHEM/db.conf
   DBMODEL    MYSQL
   DEF        /opt/fhem-zwei/FHEM/db.conf Nichts:Nichts
   MODE       asynchronous
   NAME       logdb
   NR         13
   NTFY_ORDER 50-logdb
   PID        1859
   REGEXP     Nichts:Nichts
   STATE      connected
   TYPE       DbLog
   VERSION    2.11.1
   dbconn     mysql:database=fhem;host=192.168.2.22;port=3306
   dbuser     fhem
   Helper:
     COLSET     1
     DEVICECOL  64
     EVENTCOL   512
     READINGCOL 64
     TYPECOL    64
     UNITCOL    32
     VALUECOL   128
   Readings:
     2017-02-04 16:18:01   CacheUsage      0
     2017-02-04 16:18:01   NextSync        2017-02-04 16:18:31 or if CacheUsage 500 reached
     2017-02-04 16:12:48   lastReduceLogResult Rows processed: 0, deleted: 0, updated: 0, time: 10.00sec
     2017-02-04 16:18:01   state           connected
   Cache:
     index      0
Attributes:
   asyncMode  1
   room       LogDB
   userReadings DbFileSize:lastReduceLogResult.* { (split(' ',`du -m dbLog.db`))[0] }


Als RegExfilter habe ich Nichts:Nichts gesetzt, weil ja auch hier nicht geloggt werden soll. Dacht erst, dass es daran liegt, aber auch, wenn ich auf .*:.* setze passiert bei reducelog nichts. Ich führe den Befehl wie folgt aus:

set logdb reduceLog 60 average

allerdings werden keine Daten reduziert und nach 10 Sekunden kommt immer folgendes Ergebnis:
DbLog logdb: reduceLog executed. Rows processed: 0, deleted: 0, updated: 0, time: 9.00sec

kann mir einer weiterhelfen wo der Fehler liegt?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

DS_Starter

Hallo Amenophis86,

um zu vergelichen habe ich jetzt mal bei mir ein

set logdb reduceLog 100 average

ausführt. Klappt problemlos. Im Logfile ist das Ergebnis protokolliert.


2017.02.04 16:42:03.421 3: DbLog LogDB: reduceLog requested with DAYS=100, AVERAGE=HOUR
2017.02.04 16:42:41.970 3: DbLog LogDB: reduceLog deleting 5209 records of day: 2016-10-21
2017.02.04 16:42:48.273 3: DbLog LogDB: reduceLog (hourly-average) updating 51 records of day: 2016-10-21
2017.02.04 16:42:59.637 3: DbLog LogDB: reduceLog deleting 145905 records of day: 2016-10-22
2017.02.04 16:45:32.531 3: DbLog LogDB: reduceLog (hourly-average) updating 1533 records of day: 2016-10-22
2017.02.04 16:45:44.300 3: DbLog LogDB: reduceLog deleting 126102 records of day: 2016-10-23
2017.02.04 16:47:56.990 3: DbLog LogDB: reduceLog (hourly-average) updating 1527 records of day: 2016-10-23
2017.02.04 16:48:05.587 3: DbLog LogDB: reduceLog deleting 106131 records of day: 2016-10-24
2017.02.04 16:49:57.399 3: DbLog LogDB: reduceLog (hourly-average) updating 1493 records of day: 2016-10-24
2017.02.04 16:50:06.043 3: DbLog LogDB: reduceLog deleting 104278 records of day: 2016-10-25
2017.02.04 16:51:55.363 3: DbLog LogDB: reduceLog (hourly-average) updating 1521 records of day: 2016-10-25
2017.02.04 16:52:04.273 3: DbLog LogDB: reduceLog deleting 100690 records of day: 2016-10-26
2017.02.04 16:53:50.871 3: DbLog LogDB: reduceLog (hourly-average) updating 1475 records of day: 2016-10-26
2017.02.04 16:53:54.554 3: DbLog LogDB: reduceLog executed. Rows processed: 636375, deleted: 588315, updated: 7600, time: 711.00sec


Die Regexfilter oder Mode-Settings sind hier nicht relevant weil reducelog eine komplett eigenständige Funktion ist die ihre eigenen Selekt/Updatemechanismen mitbringt.Das hat auch nichts mit der non-blocking Log-Funktion zu tun.
Die einfachste Ursache wäre wenn deine DB keine EInträge älter als deine Angabe im Befehl enthält, aber das hast du sicher schon gecheckt.

Möglich wäre aber auch dass du mal schauen müßtest ob der benutze User auch die entsprechendne Rechte da du ja von einem entfernten Rechner auf deine DB zugreifst (nehme ich wegen deiner Erläuterung an). Es gibt ja u.U. diverse Beschränkungen in der Userverwaltung bei MySQL.
Mehr fällt mir dazu grad nicht ein ...

Viele Grüße
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Amenophis86

Verstehe ich nicht, die Rechte habe ich mal auf "all privileges" geändert, aber passiert trotzdem nichts.

Alte Daten sind auf jeden Fall drin. Sind über 1,5 Millionen und ich sehe auch die älteren Daten. Dann muss ich mal weiter suchen, woran das liegen kann. Ich danke dir trotzdem für die Antwort.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

DeeSPe

Dass reduceLog noch nicht non-blocking ist, musste ich gestern schmerzhaft feststellen als mein FHEM für 34 Minuten blockiert war. :(

ZitatlastReduceLogResult Rows processed: 5944765, deleted: 5528207, time: 2036.02sec

Was mich allerdings viel mehr wundert ist die Tatsache dass die Datenbank (Dateigröße) kaum geschrumpft ist.
Vor reduceLog waren es rund 7,5 Millionen Einträge bei rund 700 MB und danach sind es 1,7 Millionen Einträge mit 580 MB.
Die Anzahl der Datensätze ist um Faktor 4,4 geschrumpft! Die Datenmenge aber nur um Faktor 1,2.
Wird da irgendwo Speicher nicht wieder frei gegeben?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

JoeALLb

Welchen Datenbank typ nutzt du? Mysql mit InnoDB gibt tatsächlich den Speicher ungern/nicht wieder frei.
Wenn du das dennoch willst kannst du die Daten "umkopieren".
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

DeeSPe

Zitat von: JoeALLb am 04 Februar 2017, 20:12:55
Welchen Datenbank typ nutzt du? Mysql mit InnoDB gibt tatsächlich den Speicher ungern/nicht wieder frei.
Wenn du das dennoch willst kannst du die Daten "umkopieren".

Jepp!!!

Das ist ja eine Sauerei! Was soll denn das?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DS_Starter

#564
Hallo Dan,

ja Reducelog läuft noch so wie es von rapster bei der Erstellung designed war. Ich habe noch vor diese Funktion auf non-blocking umzustellen.
Aber das führen wir in diesem Thread https://forum.fhem.de/index.php/topic,65860.0.html weiter.

Davon unabhängig reduziert recucelog allein noch nicht den belegten Platz auf der Platte/SD. Je nach DB-Typ ist dann noch ein "optimize table" (MySQL) bzw. ein "VACUUM" (SQLite) nötig um Platz freizugeben. Bei Postgre weiß ich es jetzt nicht ad hoc. Ich habe es noch nicht prbiert, aber wenn die DB im asynchronen Mode betrieben wird, sollte FHEM nicht blockieren sofern man diese Aktivität von außen auf der DB initiiert.

EDIT: oder so wie Joe schrieb  ;)

Grüße
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DeeSPe

Zitat von: DS_Starter am 04 Februar 2017, 20:17:28
Hallo Dan,

ja Reducelog läuft noch so wie es von rapster bei der Erstellung designed war. Ich habe noch vor diese Funktion auf non-blocking umzustellen.
Aber das führen wir in diesem Thread https://forum.fhem.de/index.php/topic,65860.0.html weiter.

Davon unabhängig reduziert recucelog allein noch nicht den belegten Platz auf der Platte/SD. Je nach DB-Typ ist dann noch ein "optimize table" (MySQL) bzw. ein "VACUUM" (SQLite) nötig um Platz freizugeben. Bei Postgre weiß ich es jetzt nicht ad hoc. Ich habe es noch nicht prbiert, aber wenn die DB im asynchronen Mode betrieben wird, sollte FHEM nicht blockieren sofern man diese Aktivität von außen auf der DB initiiert.

EDIT: oder so wie Joe schrieb  ;)

Grüße
Heiko

Danke Heiko für den OPTIMIZE Tipp. Arbeite zwar schon eine Weile hin und wieder mal mit SQL aber richtig gut damit auskennen ist was Anderes...  ;)
Nach Optimize von ehemals 580,7 MB nur noch 143,7 MB Platte belegt!
Happy! :D

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

JoeALLb

Zitat von: DeeSPe am 04 Februar 2017, 20:23:08
Danke Heiko für den OPTIMIZE Tipp. Arbeite zwar schon eine Weile hin und wieder mal mit SQL aber richtig gut damit auskennen ist was Anderes...  ;)
Nach Optimize von ehemals 580,7 MB nur noch 143,7 MB Platte belegt!

Hallo Dan, ja, sorry, das hatte ich gerade so nicht mehr im Kopf. Wenn InnoDB beim OPTIMIZE gelockt wird, wird
(in neueren Versionen) auch die Dateigröße reduziert.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

DeeSPe

Zitat von: JoeALLb am 04 Februar 2017, 21:46:38
Hallo Dan, ja, sorry, das hatte ich gerade so nicht mehr im Kopf. Wenn InnoDB beim OPTIMIZE gelockt wird, wird
(in neueren Versionen) auch die Dateigröße reduziert.

Kein Ding, hat ja jetzt so geklappt!
Muss man ja nur wissen. :D

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Benni

Zitat von: Benni am 20 Januar 2017, 16:12:28
Mit meinem Wunderground-Problem muss ich mich wohl wieder in den entsprechenden Thread zu Wunderground trollen  :-\

Hallo Heiko!

nur kurz zu deiner Info! Ich habe da jetzt etwas weiter analysiert und bin inzwischen tatsächlich mit einem weiteren Ansatz im entsprechenden Wunderground-Thread wieder "vorstellig" geworden :)

Gruß Benni.

DS_Starter

Hallo Benni, MichaelT, fiesenjung und alle anderen Mitstreiter,

danke für eure Rückmeldungen.

Anbei noch die V2.11.4, welche die letzte Version hier in diesem Thread sein soll. Sie hat eigentlich nichts mehr mit der Umstellung der Log-Funktion auf non-blocking zu tun, sondern enthält ein Feature für SQLite -User.

Die Attribute colEvent, colReading, colValue gelten nun auch für SQLite sofern sie man setzt. Es geht zurück auf einen Vorschlag von Garry um z.B. die Event-Daten nicht in die DB zu schreiben. Mit colEvent=0 ist das möglich. Natürlich auch für Nicht-SQlite DBs.

Zur Beachtung ... wird eines dieser Attribute gesetzt, gelten die Feldlängenbeschneidungen insgesamt auch für SQLite, weshalb u.U. die Feldlängen insgesamt im Modul über die Attribute angepasst werdn müssen sofern man z.B. längere Readings als 512 Zeichen speichern will.
Ohne diese Attr bleibt alles wie bisher. Steht in Commandref beschrieben.

Außerdem sind die Logausgaben im asynch-Mode etwas erweitert und es wird geprüft ob das DBI-Modul installiert ist. Sonst beim Define eine entsprechende Meldung ausgegeben.

Bitte testet die Version auch bei euch, insbesondere SQLite mit diesem Feature.  Garry (weiter vorn) hat es schon erfolgreich getan. Diese Version möchte ich im Laufe der Woche einchecken.
Danach möchte ich diesen Thread hier schließen, da er sich speziell mit der non-blocking Logfunktion beschäftigte was seit 2.10.1 abgeschlossen ist.

Alle weiteren Optimierungen diskutieren und verfolgen wir hier https://forum.fhem.de/index.php/topic,65860.0.html

viele Grüße
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter