Hallo zusammen,
bei mir haben sich ~71mio Einträge in der Datenbank gesammelt, da ich nicht dran gedacht habe, meinen DbLog einzuschränken. ReduceLog läuft jetzt seit ~5h und wenn man sich im Log die Geschwindigkeit anschaut, dann dürfte die Aktion noch weitere 29h laufen.
Wie kann ich diesen Vorgang "sicher" abbrechen, ohne mir die Datenbank oder gar fhem zu zerschiessen?
Falls es was zur Sache tun sollte: sowohl die Datenbank als auch fhem laufen als Docker Container.
Nutzt du MySQL/MariaDB ?
Wenn ja -> DbRep Device benutzen und
get <device> procinfo
aufrufen. Du siehst dann eine Tabelle wie diese mit der Spalte ID
ID USER HOST DB CMD TIME_Sec STATE INFO PROGRESS
41218 fhem fhem.myds.me:38076 fhem Query 8 Sending data SELECT TIMESTAMP,VALUE, if(VALUE-@V < 0 OR @RB = 1 , @diff:= 0, @diff:= VALUE-@V ) as DIFF, @V:= VALUE as VALUEBEFORE, @RB:= '0' as RBIT FROM history where ( DEVICE = 'eg.flur.server_Pwr' ) AND ( READING = 'energyCalcKwh' ) AND TIMESTAMP >= '2017-05-01 00:00:00' AND TIMESTAMP <= '2020-04-17 15:01:09' ORDER BY TIMESTAMP 0
41219 fhem fhem.myds.me:38082 fhem Query 8 Sending data SELECT TIMESTAMP,VALUE, if(VALUE-@V < 0 OR @RB = 1 , @diff:= 0, @diff:= VALUE-@V ) as DIFF, @V:= VALUE as VALUEBEFORE, @RB:= '0' as RBIT FROM history where ( DEVICE = 'eg.az.fridge_Pwr' ) AND ( READING = 'energyCalcKwh' ) AND TIMESTAMP >= '2016-06-01 00:00:00' AND TIMESTAMP <= '2020-04-17 15:01:10' ORDER BY TIMESTAMP 0
41221 fhem fhem.myds.me:38104 fhem Query 0 show full processlist
Die ID mit der passenden Laufzeit (falls es mehrere gibt) nimmst du und führtst im DbRep damit aus:
set <dev> sqlCmd kill <ID>
Damit bricht das laufende Statement ab und die aktuelle Änderung wird zurück gerollt. Im DbLog gibt es eine Fehlermeldung.
Dabei geht auch nichts kaputt.
HINWEIS: grundsätzlich sollte man immer eine valide Sicherung der DB und FHEM haben.
Aber davon abgesehen würde ich reduceLog weiter laufen lassen. Stört doch nicht sofern reduceLogNbl genutzt.
Es gibt das auch generell non-blocking im DbRep.
Grüße,
Heiko