DBLog - Historische Werte ausdünnen

Begonnen von C0mmanda, 14 September 2015, 18:38:21

Vorheriges Thema - Nächstes Thema

ernst1024

besser ist das :-)
Das 'yes' besagt nur dass in dem entsprechenden Feld kein Eintrag erfolgen muss. Beim index muss aber ein Eintrag erfolgen. Siehst du aber wie gesagt wenn du das ganze nochmal im Vollbild modus ausführst
Gruß Ernst

rapster

Zitat von: Amenophis86 am 25 März 2016, 15:29:19
Beziehe mich auf die CommandRef, wo folgendes steht:

Daher wollte ich es vorher klären :)

Schaut gut aus, Index ist bei dir laut Bild vorhanden  8)

Gruß
Claudiu

Amenophis86

Danke für die Infos und ja, im Vollbildmodus sieht man es ganz eindeutig ;)
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...

abc2006

Hi,,
habe gerade den ganzen Thread gelesen und freue mich, dass er genau an der Stelle endet, wo meine Frage anfängt :-)
Ich würde gerne meine Datenbank verkleinern.

Zitat von: Amenophis86 am 23 März 2016, 13:18:31
Ich habe von mysql leider nicht so viel Ahnung und würde nun gerne mittels reduceLog meine Datenbank reduzieren. Wie kann ich feststellen, oder dieser "Search_Idx" vorhanden ist?

Wie geht das ganze bei sqlite?
sqlite> select * from sqlite_master;
table|history|history|2|CREATE TABLE 'history' (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(512), READING varchar(32), VALUE varchar(32), UNIT varchar(32))
table|current|current|3|CREATE TABLE 'current' (TIMESTAMP TIMESTAMP, DEVICE varchar(32), TYPE varchar(32), EVENT varchar(512), READING varchar(32), VALUE varchar(32), UNIT varchar(32))
index|Search_Idx|history|4|CREATE INDEX Search_Idx ON `history` (DEVICE, READING, TIMESTAMP)
sqlite>
sqlite> .databases
seq  name             file                                                     
---  ---------------  ----------------------------------------------------------
0    main             /opt/fhem/fhem_sqlite.db                                 
sqlite> .dbinfo main
database page size:  1024
write format:        2
read format:         2
reserved bytes:      0
file change counter: 131
database page count: 1151196
freelist page count: 0
schema cookie:       4
schema format:       4
default cache size:  0
autovacuum top root: 0
incremental vacuum:  0
text encoding:       1 (utf8)
user version:        0
application id:      0
software version:    3008011
number of tables:    2
number of indexes:   1
number of triggers:  0
number of views:     0
schema size:         385


Danke schonmal für eure tolle Arbeit!!

Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

chris1284

#184
da ich auch gerade aufgeräumt habe und feststellen musste dass ein löschen alter einträge per deleteolddays bezogen auf die datenbankgröße auf dem datenträger genau nichts bringt, habe ich ein wenig probiert.

per usercaommand VACUUM [tablename] also VACUUM history konnte ich nach dme löschen alter einträge auch die filegrößer erheblich verringern.

evtl etwas was man ins modul mit aufnehmen könnte (oder in der anleitung zum erstellen der db gleich auf auto setzen, vor dem erstellen der db).

Lars

Zitat von: rapster am 29 Oktober 2015, 14:14:01
Um z.B. nur das reading 'measured-temp' des devices 'wt_wohnzimmer' mit average zu reduzieren müsste die regexp so aussehen:
set <dbLog> reduceLog <days> average exclude=(?!wt_wohnzimmer:measured-temp).*
In dem Fall matcht die regexp einfach alle anderen devices außer 'wt_wohnzimmer:measured-temp'.

Oder zweites Beispiel um alle readings von 'wt_wohnzimmer' und 'wt_esszimmer' zu reduzieren und andere devices unberührt zu lassen:
set <dbLog> reduceLog <days> average exclude=(?!wt_(esszimmer|wohnzimmer):.*).*


Kurze Verständnisfrage: Wieso braucht es das .* hinter device:reading?
Hintergrund: Ich habe mit folgendem set versucht nur einige Readings zusammenzufassen, dblog hat aber wohl über alle Readings einen Durchschnitt gebildet

set mydblog reduceLog 14 average exclude=(?!Heizung:(Neigung|Niveau|Temp-Aussen|Temp-Ruecklauf|Temp-Vorlauf|Temp-WarmWasser-Ist|Temp-WarmWasser-Soll))
FHEM Hauptsystem auf ESXi VM | dblog | 3 rPi für Nebensysteme | 2 Beaglebone Black Test- / Integrationssystem

rapster

Zitat von: Lars am 05 Juli 2016, 22:40:53
Kurze Verständnisfrage: Wieso braucht es das .* hinter device:reading?

Hinter device:reading brauchts kein .*

Da du hier allerdings einen negative lookahead hast, also erstmal nur sagst, "was darf nicht im text enthalten sein", musst du anschließend auch noch sagen was soll enthalten sein.
Ziel dieser RegEx an der Stelle ist ja dass sie auf alle anderen devices und readings matcht, die du nicht im negative lookahead angegeben hast.

Also müsste dein cmd so aussehen:
set mydblog reduceLog 14 average exclude=(?!Heizung:(Neigung|Niveau|Temp-Aussen|Temp-Ruecklauf|Temp-Vorlauf|Temp-WarmWasser-Ist|Temp-WarmWasser-Soll)).*

kleineslichtHH

Hallo liebe DbLoG-Gemeinde,

wird mein Vorhaben so gelingen alles zu reduzieren, bis auf ALLE Kontostand und Zaehlerstand Werte?

set myDbLog reduceLog 30 average=hour exclude=.*:Kontostand,Zaehlerstand

Sailor

Hi Chris

Zitat von: chris1284 am 19 Juni 2016, 14:02:54
per usercaommand VACUUM [tablename] also VACUUM history konnte ich nach dme löschen alter einträge auch die filegrößer erheblich verringern.

Der Command sorgt mit zuverlässiger Sicherheit für ein fhem-Komplett-Absturz.
Selbst die MySQL - Konsole unter Telnet hängt sich auf...

Vielleicht sind die mittlerweile 3GB in der fhem.db einfach zu groß...

Dann bleicbt mir nichts anderes übrig als die Tabelle von 0 an neu zu beginnen... Schade.

Gruss
    Sailor

******************************
Man wird immer besser...

KernSani

Versuche gerade ebenfalls meine fhem.db auszudünnen, was zu FHEM Totalabsturz führt... Mein Plan für's Wochenende: DB exportieren, in eine "richtige" DB importieren, ausdünnen und dann als CSV wieder zurück... Mal sehen wie das klappt...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Tedious

Ich nutze mySQL und schicke jede Nacht um 0400 ein Statement auf die DB

optimize table fhem.history
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

chris1284

#191
Zitat von: KernSani am 05 August 2016, 12:47:53
Versuche gerade ebenfalls meine fhem.db auszudünnen, was zu FHEM Totalabsturz führt..
in der regel kackt es nicht ab, wird aber solange blockiert wie in der db gearbeitet wird (warum man bei dblog kein nonblocking hinbekommt, wer weiss).
wenn du es einmal bereinigt hast werden die regelmäßigen folgenden bereinigungen fhem nicht so lange ausbremsen.

ich würd einfach mal fhem beenden, die db über konsole bereinigen und fhem wieder starten. mit export "in eine richtige db" (was auch immer das sein soll) und daraus wieder ein export zum import in die fhemdb macht dir wahrscheinlich mehr arbeit und erhöht die gefahr von fehlern.

ich habe wir einen wartungsdummy mit allen notwendigen set befehlen gebaut der regelmäßig per at geschaltet wird (alte einträge löschen alle 14 Tage und alle 30 das db-file verkleinern)

marvin78

Die Funktion ist IMHO ohne non-blocking in Produktivsystemen sinnlos.

KernSani

Zitat von: chris1284 am 05 August 2016, 15:06:12
in der regel kackt es nicht ab, wird aber solange blockiert wie in der db gearbeitet wird.
FHEM verabschiedet sich tatsächlich komplett. Ich gehe aber davon aus, dass - wenn die DB einmal beteinigt ist - regelmäßige Bereinigung über FHEM Bordmittel funktioniert.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

rapster

Zitat von: kleineslichtHH am 04 August 2016, 18:14:33
Hallo liebe DbLoG-Gemeinde,

wird mein Vorhaben so gelingen alles zu reduzieren, bis auf ALLE Kontostand und Zaehlerstand Werte?

set myDbLog reduceLog 30 average=hour exclude=.*:Kontostand,Zaehlerstand


Nein,

Wenn du bei allen Devices die Readings Namens "Kontostand" und "Zaehlerstand" ausschließen möchtest dann so:
set myDbLog reduceLog 30 average=hour exclude=.*:(Kontostand|Zaehlerstand)

Wenn du bei dem Device "Bank" das Reading "Kontostand" und bei Device "Strom" das Reading "Zaehlerstand" ausschließen willst, dann so:
set myDbLog reduceLog 30 average=hour exclude=Bank:Kontostand,Strom:Zaehlerstand)