DBLog: MySQL-DB riesig: löschen und neu?

Begonnen von Gunther, 10 November 2019, 22:52:13

Vorheriges Thema - Nächstes Thema

Gunther

Ich bin leider kein SQL-Kenner (wie Ihr jetzt lesen werdet).

Vor ca. 1 Jahr habe ich DBLog zum Rennen gebracht. Jetzt ist mein Container mit 32 GB voll.
Es wird anscheinend alles geloggt.

Jetzt suche ich eine Strategie um DBLog sinnvoll zu nutzen und die Datenbank wieder klein zu bekommen.

Meine Idee:
1. Zuerst einmal festlegen, dass nichts geloggt wird (und ich alles manuell einstellen muss, was geloggt werden soll)
2. Alle Daten rauswerfen
3. Schritt für Schritt die Devices einstellen, die ich loggen möchte.

Passt das?
Falls ja, wie mache ich das?
Danke!
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

DS_Starter

#1
Hallo Gunther,

es braucht keinen Gewaltakt alle Daten rauszuwerfen oder erstmal nichts zu loggen.

Überlege dir im ersten Schritt einfach was genau du loggen willst und stelle DbLog danach ein. Es gibt wirklich umfangreiche Möglichkeiten.
Ich gebe dir ein paar Stichworte zu Attributen für diesen Zweck: DbLogSelectionMode, DbLogInclude,  DbLogExclude, DbLogValueFn, valueFn, excludeDevs. Natürlich nicht das Regex im DEF vernachlässigen.

Danach kannst du alle Daten löschen die nicht gebraucht werden. Dazu musst du keine SQL können. Definiere dir ein DbRep und damit kannst du spezifisch Devices, Readings, Kombinationen aus beiden bzw. abhängig von Zeitperioden usw. löschen.
Was dann noch in der DB geblieben ist, kannst du mit DbRep zB. mit delDoublets , delSeqDoublets und reduceLog reduzieren.

Wenn das alles passiert ist, dann die DB mit optimizeTables verkleinern.

Grüße,
Heiko
ESXi@NUC+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

Gunther

Hallo Heiko,

vielen Dank für Deine ausführliche Antwort. Das hilft mir.

Ich habe nun DbLogSelectionMode auf DbLogInclude gestellt, so dass erstmal nichts mehr geloggt wird.
Ein DBRep-Device habe ich angelegt.

Mein Problem ist, dass der Login auf die DB nicht mehr klappt. Ich vermute die Größe als Problem.
Fehlermeldung:
DbLogSelectionMode, DbLogInclude

Ich checke jetzt mal, ob ich den Storage im Proxmoxcontainer erweitern kann und ob das einen Login ermöglicht.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Gunther

#3
grr, versehentlich habe ich den Container um 35 GB vergrößert...
egal

DBLog scheint sogar verbunden zu sein (connected), leider steht DBRep auf disconnected
Ich forsche mal

edit. restart FHEM --> scheint zu laufen
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Gunther

ich lösche gerade alle 185.000.000 (!!!) Einträge *g*
Dann geht es langweilig mit wenigen Devices weiter.

Melde mich bei Fragen! Vielen Dank!
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Gunther

So nun habe ich mit meiner fetten Datenbank anscheinend eine Grenze überschritten:

error:

DBD::mysql::st execute failed: The total number of locks exceeds the lock table size at ./FHEM/93_DbRep.pm line 4005.


Wieviele Einträge sind max? Dann kann ich versuchen das in mehreren zeitlichen Schritten zu machen.

Ist die commandref nicht aktuell? Irgendwie passen meine set-Befehle und die Beschreibung nicht überein.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Frank_Huber

Wenn du alles neu machen willst legst am besten ne neue DB an und löschst die alte vorher direkt in SQL (drop Befehl)

Wenn Du es über FHEM machen willst solltest die Aggregation einstellen z.B. auf täglich, dann macht er es in Häppchen.

bezüglich der Commandref, sicher dass Du da nicht dbLog und dbRep verwechselst?

DS_Starter

Moin,

aktuell ist alles. Kann natürlich sein du müsstest mal updaten.  ;)

Aber zum Thema ... wenn ich es nun richtig verstanden habe willst du tatsächlich die ganze DB komplett leeren ?
Wenn das stimmt, nimm nicht ein separates Löschen von Datensätzen (dauert lange ), sondern droppen und neues Anlegen der history Tabelle. Das muss man aber manuell machen. Heute Abend könnte ich dir Hilfe dazu geben.

Wenn doch löschen von DS,  kannst du zeitliche Scheiben benutzen, z.b. timeOlderThan auf d:200 setzen. Dann wird delEntries alles löschen was älter als 200 Tage ist. Dann den Wert reduzieren und wiederholen usw. usf.

Frank war schneller  :D

Lg,
Heiko


ESXi@NUC+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

Gunther

#8
So, Datenbank ist leer.

Jetzt habe ich im DBLOG eingestellt:
DbLogSelectionMode: Include

Mein erstes Test-Device hat nun:
DbLogInclude: temperature:300,battery:43200

Geloggt wird nur die Temperatur (und hoffentlich einmal am Tag der Batteriestand)
Warum wird trotzdem durchgängig geloggt und nicht im 5-Minuten-Takt?
2019-11-12 14:45:19 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:45:24 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:46:07 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:46:11 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:46:20 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:46:33 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:46:46 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:46:51 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:47:04 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:47:08 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:47:17 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:47:21 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:47:38 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:47:47 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:47:56 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:48:22 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:48:26 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:48:44 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:48:57 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:49:01 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:49:10 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:49:23 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:49:36 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:49:45 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:49:49 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:49:53 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:49:58 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:50:14 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:50:28 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 14:51:03 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 14:51:07 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C


EDIT:
Und noch zwei Zusatzfragen:
Macht es überhaupt Sinn den state zu loggen, wenn ich mir die einzelnen Readings rauspicke?

Vielleicht erklärt das meine state-Frage ein wenig:
Kann ich Werte auch nur dann loggen, wenn sie sich verändern oder in einer Kombination: höchstens alle 5 Minuten wenn eine Veränderung da ist, sonst alle 10 Minuten

EDIT 2:
OK, habe nun zumindest verstanden, warum geloggt wird:
ZitatIst MinIntervall angegeben, so wird der Logeintrag nur dann nicht geloggt, wenn das Intervall noch nicht erreicht UND der Wert des Readings sich nicht verändert hat.
Nur wie kann ich die Intervalle nun länger bekommen, trotz Änderung
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

DS_Starter

ZitatWarum wird trotzdem durchgängig geloggt und nicht im 5-Minuten-Takt?
Weil sich der Wert ändert. Die Option force benutzen um die Zeit hart einzuhalten.

Kann ich Werte auch nur dann loggen, wenn sie sich verändern
Machst du im Prinzip schon. Wenn du die Zeit stark hochsetzt wäre es so wie du es wolltest.

Kombination: höchstens alle 5 Minuten wenn eine Veränderung da ist, sonst alle 10 Minuten
Wüsste addhoc nicht wie, soll aber nicht heissen es wäre unmöglich.  ;)

Grüsse,
Heiko
ESXi@NUC+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

Gunther

Leider komme ich noch nicht weiter.
Habe die Cref durchsucht und finde das Ding nicht.

Jetzt habe ich gesehen, dass Du hier etwas dazu gepostet hast:
https://forum.fhem.de/index.php/topic,65860.msg991601.html#msg991601
Mache ich die Einstellungen in einem attr für alle Devices? Oder kann ich mehrere attr machen?

FHEM Update habe ich gerade gemacht.
Muss ich manuell updaten, damit ich die Funktion nutzen kann. Finde sie leider nicht.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

DS_Starter

Hallo Gunther,

die force option setzt du zur Zeit in den DbLog-Attributen der Quelldevices ein.
Auszug aus Commandref DbLog:

DbLogInclude

    attr <device> DbLogInclude regex:MinInterval[:force],[regex:MinInterval[:force]] ...
    .....
    Ist MinIntervall angegeben, wird der Logeintrag nicht geloggt, wenn das Intervall noch nicht erreicht und der Wert des
    Readings sich nicht verändert hat. Ist der optionale Parameter "force" hinzugefügt, wird der Logeintrag auch dann nicht
    nicht geloggt, wenn sich der Wert des Readings verändert hat.
     Siehe auch das DbLog Attribut DbLogSelectionMode. Es beeinflußt wie DbLogExclude und DbLogInclude ausgewertet 
     werden.

Was du gesehen hast ist eine Weiterentwicklung die ich zum Test bereitgestellt habe (kannst du natürlich auch mitmachen  ;) ), aber noch nicht offiziell eingecheckt ist.

Wenn du die Testversion nutzt aus https://forum.fhem.de/index.php/topic,65860.msg991601.html#msg991601 , setzt du das Attribut defaultMinInterval im DbLog, was dann für alle angegebenen Devices gilt (devspec). Angaben zu minInterval in DbLogIncude/DbLogExclude in den Quelldevices gelten aber vorrangig.

Grüße,
Heiko
ESXi@NUC+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

Gunther

Hallo Heiko,

vielen Dank!

Ist das so richtig? Ich bekomme teilweise länger keine Daten
temperature:300:force,battery

So sehen die Daten aus:
2019-11-12 22:15:32 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 22:15:35 kg_fl_Eisschrank LACROSSE temperature: -20.7 temperature -20.7 °C
2019-11-12 22:37:21 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 22:42:21 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 22:47:35 kg_fl_Eisschrank LACROSSE temperature: -20.8 temperature -20.8 °C
2019-11-12 23:03:06 kg_fl_Eisschrank LACROSSE temperature: -20.6 temperature -20.6 °C
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

DS_Starter

Ja, das ist so richtig definiert.
Das du manchmal längere Zeit keine Daten geloggt bekommst ist normal.
Der Begriff "minInterval" wird oft nicht richtig interpretiert. Er besagt nicht dass ein Event(Reading) in diesem Abstand unbedingt einen Logeintrag erzeugt, sondern dass die erzeugten Events hinsichtlich ihres Auftretens zeitlich bewertet und geloggt werden wenn der Mindestzeitraum verstrichen ist (und der Wert sich nicht geädert hat bzw. force-Option).

Wenn du unbedingt einen Logeintrag alle x-Sekunden/Minuten haben willst, kannst du das "set addLog" im DbLog verwenden. Der Befehl kann auch recht umfassend eingestellt werden.

LG,
Heiko
ESXi@NUC+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