Datenbank aufräumen, säubern und klein halten

RudiP

Well-known member
Gestern überraschte mich HA mit der Meldung, das ihm der Festplattenspeicher knapp werden würde.
"Was ? Kann nicht sein" war mein erster Gedanke. Immerhin hatte ich HA damals 100 GB zugewiesen. Die können doch unmöglich voll sein.
Im Internet fand ich dann einen Hinweis, wie man das prüfen kann. Den Weg kannte ich auch noch nicht.
Einstellungen -> System -> Reparaturen und dann rechts oben die 3 Punkte auswählen und "Informationen zum System".
Weit unten unter "Recorder" findet man dann die Datenbank und siehe da, die hat eine Größe von knapp 57 GB. Ufff
Unter Einstellungen -> System -> Speicher sieht man auch, wie voll die Festplatte ist und ja, 96 GB von 100 GB belegt ist nicht so toll.

Nun gut. Ich habe mir erst mal damit geholfen, das ich HA mal schnell 100 GB zusätzlich gegeben habe, was dank Proxmox überhaupt kein Problem war.
Aber das kann natürlich nicht die Lösung des Problems sein.
Nun bin ich ein Freund davon, gewisse Daten auch mal was länger zur Verfügung zu haben, so 2 - 3 Jahre wären da schon fein. Damit kann man dann auch mal die PV Produktion oder den Gasverbrauch mit den letzten Jahren vergleichen.
Also habe ich in der configuration.yaml den Eintrag
Code:
recorder:
  purge_keep_days: 1100
Da die Datenbank aber nun doch deutlich gewachsen ist und das in nur knapp 2 Jahren, kam mir der Gedanke, WAS speichert die Datenbank eigentlich alles und was davon ist unnütz ?
Ich habe z.B. den Müllkalender am laufen. Speichert die Datenbank etwas alle Abfuhrtermine und das über 3 Jahre ?
Wäre ja totaler Blödsinn.
Wurde eine Automatisierung am 21.03.2020 ausgelöst ? Vollkommen unwichtig.
Habe ich vor 5 Wochen mit dem Lichtschalter das Licht angemacht ? Interessiert doch gar nicht mehr.
Aber, wenn HA sowas tatsächlich in der Datenbank speichert, könnte man das ja vom Speichern ausschließen und die Datenbank damit eventuell deutlich kleiner machen.
Taucht also die Frage auf, WAS speichert HA alles in der Datenbank.
InfluxDB -> Explorer und.....
Mist, nach Entitäten kann man wohl nicht suchen.
Ich habe mir dann mal SQLite web installiert, um ein wenig in der Datenbank zu schnüffeln.
ACHTUNG !!! Wer keine Ahnung von Datenbanken hat, sollte da nichts machen. Das Risiko, sich die Datenbank zu zerschiessen ist zu groß.

Nun, ich bin da noch nicht allzu tief in die tiefen der Datenbank eingedrungen, aber meine Befürchtungen scheinen sich bewahrheitet zu haben.
Eine Abfrage der Tabelle "states" erbrachte 195.400.702 Ergebnisse. Die Abfrage dauerte auch mal eben über 3 Minuten.
Ohne den Aufbau der Tabelle bzw. der Datenbank zu kennen wird es schwer, da was vernünftiges raus zu lesen, aber was man sehen kann sind Einträge wie "23:13" oder "am: 05.10.2023" oder "on" bzw. "off".
Das sind genau so Einträge, wie ich meine, braucht kein Mensch über einen längeren Zeitraum. Ich muß jetzt nur noch rausfinden, zu welcher Entität dieser Eintrag gehört um diesen dann in der configuration.yaml in Zukunft vom Speichern in der Datenbank auszuschließen.

Daran werde ich die nächsten Tage arbeiten und euch davon Berichten, so das jeder von euch das Nachvollziehen und auch selbst bei sich Anwenden kann. Ich denke, der ein oder andere hat auch Interesse daran, gewisse Daten über einen längeren Zeitraum zu speichern.
 
Ich habe herausgefunden, wie ich einzelne Entitäten sehen kann. Ich sehe z.B. mein Gasmeter bzw. das freie RAM.
Start der Aufzeichnung 02.10.2023 um 13:00:00 Uhr und seit dem meldet er stündlich seinen Wert.
8114 Einträge befinden sich in der Datenbank, das passt halbwegs, wenn man jeden Tag seit dem 02.10.2023 rechnet, mit 24 multipliziert. Abzüglich einiger Stunden, wo keine Werte Aufgezeichnet wurden, weil HA nicht lief oder das Gasmeter nicht wollte.
Und ehrlich, mich Interessiert es nicht, was das Gasmeter an einem Tag vor über 10 Monaten an freiem Speicher hatte.
Also werde ich diesen Wert, sowie wohl etliche andere von der weiteren Aufzeichnung in der Datenbank ausschließen und dann demnächst mal einen PURGE auslösen und hoffen, das die Datenbank dann deutlich verkleinert wird.
Ich werde Berichten.
 
Vermutlich hast Du mich falsch Verstanden. Das HA in der Grundeinstellung einfach alles aufzeichnet, ist bekannt. Der Wunsch, einiges auch länger aufzuheben, wurde hier auch schon mal geäußert.
Und das die Raspi Freunde, die auf SD Arbeiten davon auch noch profitieren dürften, wenn man die Schreibwut etwas eingrenzt, ist doch nur positiv.
Ich schau jetzt halt nur, wie man alles miteinander kombinieren könnte, so das alle davon profitieren können.
 
Hier mal ein Beispiel, wie ich aktuell meine configuration.yaml aufgebaut habe, um der Datenbank ein wenig auf die Finger zu schauen.
Code:
recorder:
  purge_keep_days: 1100
  exclude:
    domains:
      - update
    entity_globs:
      - sensor.sun*
      - weather.*
    entities:
      - sensor.wechselrichter_1_powerdc
      - sensor.wechselrichter_2_powerdc
      - sensor.nachtstrom_powerdc
      - sensor.wechselrichter_1_voltage
      - sensor.wechselrichter_2_voltage
      - sensor.nachtstrom_voltage
      - sensor.wechselrichter_1_frequency
      - sensor.wechselrichter_2_frequency
      - sensor.nachtstrom_frequency
      - sensor.wechselrichter_1_powerfactor
      - sensor.wechselrichter_2_powerfactor
      - sensor.nachtstrom_powerfactor
      - sensor.wechselrichter_1_reactivepower
      - sensor.wechselrichter_2_reactivepower
      - sensor.nachtstrom_reactivepower
      - sensor.shell_heinsberger_str_37_diesel
      - sensor.aral_gladbacher_strasse_21_diesel
      - sensor.aral_lauerstrasse_12_diesel
      - sensor.hem_forster_weg_31_diesel
      - sensor.bft_erkelenzer_str_21_diesel
      - sensor.aral_beecker_strasse_79_diesel
      - sensor.aral_roermonder_strasse_2_diesel
      - sensor.tankcenter_heerstr_60_diesel
      - sensor.pm_heerstr_14_diesel
      - sensor.totalenergies_ungerath_301_diesel
purge_keep_days: 1100
besagt, das ich meine Daten 1100 Tage, also ca. 3 Jahre aufheben will. Das ist damals aus dem Gedanken gewachsen, das man ja doch mal gerne eine Statistik für das aktuelle Jahr mit der des Vorjahres vergleichen will.
Das HomeAssistant dann quasi alles in die Datenbank schreibt und so lange speichert, naja, damals wußte ich noch nicht, was da auf mich zukommt.
Heute weiß ich, das allein das installieren einer Wetter Integration eine wahre Datenflut auslösen kann.
Da wird einfach jede Entität, die die Wetter Integration mit sich bringt, gnadenlos in der Datenbank gespeichert und das teilweise sogar im Minuten Takt.
Kann man sich leicht Vorstellen, was das Bedeutet.
Nun bin ich aber der Meinung, das ich nicht Wissen will, wie hoch die Wolkendecke vor 2 Jahren war oder ob wir Neben hatten. Das sind Daten, die sind aktuell bzw. für die Zukunft wichtig, aber nicht in der Vergangenheit.
Gut, das wir der Datenbank mit Einträgen in der configuration.yaml sagen können, das die gewisse Sensoren nicht speichern soll.
Dafür ist das "exclude:" da. Danach haben wir die Möglichkeit, entweder ganze Bereiche (domains), teile aus Bereichen (entity_globs) oder auch nur einzelne Entitäten (entities) vom Speichern auszuschließen.
Wie man in meinem Beispiel sieht Interessiert es mich nicht, welche Spannung einer der Wechselrichter vor 2 Jahren anliegen hatte.
Bei den Spritpreisen könnte man natürlich sagen, kann man sich ne nette Statistik erstellen, wie der Spritpreis sich entwickelt hat, aber ich glaube, das haben andere für uns schon getan und kann man im Internet nachsehen.

Kommen wir mal zu meiner Wetter App. Ich habe da Astroweather installiert, nutze es aber nur, um zu sehen, wie wird das Wetter heute oder morgen. Was Gestern, letzte Woche oder letztes Jahr war, ist mir egal. Also schließen wir Astroweather komplett vom Speichern in der Datenbank aus. Dazu füge ich im Abschnitt "entity_globs" folgendes hinzu.
Code:
      - Astroweather*
Damit sollte alles, was mit "Astroweather" anfängt, nicht mehr gespeichert werden.
Und immer dran denken. Configuration.yaml nach der Änderung speichern und HA einmal Neu starten.
Vermutlich würde es reichen, die schnelle Variante "Schnelles neu laden" zu nutzen, da ja nur die .yaml neu eingelesen werden sollen, aber sicherheitshalber starte ich lieber HA komplett neu, damit die Änderungen auch überall ankommen.

Der große Vorteil für alle, die noch mit SD Karte arbeiten, die Anzahl der zu schreibenden Daten reduziert sich deutlich, je nachdem, wie viel man vom Speichern ausschließt und die Lebenserwartung der SD dürfte auch ein wenig steigen.
Für alle anderen ist der Vorteil, weniger Schreibvorgänge, damit schnelleres Arbeiten von HA. Logisch, wenn da ein ganzer Schwall Daten gespeichert werden muß, dauert es ein wenig, bis HA sich wieder um andere Dinge kümmern kann.
Je nach Abfrageintervall der Sensoren könnte sich das eventuell schon bemerkbar machen, denke ich.
Aber auch die Größe der Datenbank dürfte sich merklich reduzieren und das Backup damit schneller laufen.
Da auch bei einem Update von HA vorher die Daten und auch die Datenbank gesichert wird, laufen sicher auch die Updates danach dann schneller.

Zu Erwähnen wäre auch noch, das man HA natürlich generell das Speichern von Daten in die Datenbank untersagen kann und nur ganz bestimmte Dinge dann explizite angibt, die gespeichert werden sollen. Hat in meinen Augen aber den Nachteil, wenn man was neues Anschließt und vergisst, es zum Speichern frei zu geben, werden auch keine Daten erfasst.


Es gibt auch die Möglichkeit, gezielt bereits gespeicherte Einträge zu löschen.
Wenn man z.B. mal ein Gerät Installiert hatte, was aber zwischenzeitlich nicht mehr existiert und man die Daten auch nicht mehr haben will oder beim Rumexperimentieren diverse Helfer erstellt und getestet und dann doch verworfen wurden, sowas könnte man dann auch gezielt löschen.
Aber dazu später mehr.

Ich mach mich bei mir erst mal wieder auf die Suche, was den noch so alles gespeichert wird, was ich gar nicht brauche.
 
1100 Tage? Wow ...

Und die Langzeitdaten? Ich speichere nur 10 Tage und habe trotzdem alle Daten von Beginn an... Die älteren Daten halt nicht mehr Sekunden genau
 
Naja, sind doch nur 3 Jahre. :)
Aber wieso hast Du Langzeitdaten ? Ich denke, InfluxDB löscht da Regelmäßig.
Wobei ich eben festgestellt habe, das obiges mit exclude wohl auch nicht funktioniert. Es werden trotzdem weiterhin Daten aufgezeichnet.
Ich muß mich da mal mehr Einlesen, was die Datenbank da genau macht.
 
???
Ich war davon ausgegangen, das die InfluxDB die standard Datenbak ist. Hmmmm, da muß ich ja mal Umdenken.
 
Hallo,

mein backup ist mittlerweile 9 GB gross. Ich habe diesen März purge_keep_days auf 800 gesetzt.

Gerade bin ich in Entwicklerwerkzeuge -> statistik gegangen.
Dort gibt es einige Entitäten bei denen steht unter Problem "Für diese entität ist kein zustand verfügbar"
Kann ich die entität bedenkenlos löschen ?

eigentlich wollte ich bei einer Entität einen Wert in der Datenbank anpassen. einen "ausreisser" löschen. Laut youTube anleitung sollte ich ganz rechts "summe anpassen" sehen. Das wird aber nicht angezeigt. Unter "anpassen" kann ich anwählen, ob "summe anpassen" angezeigt werden soll. Es wird aber nicht angezeigt. wie bekomme ich das angezeigt, bzw. wie kann ich eine Korrektur eines Wertes Entität durchführen ?
 
Zuletzt bearbeitet:
Bedenkenlos eher nicht. Kommt ja immer drauf an, was für eine Entität das ist.
Ich habe hier Steckdosen mit Meßfunktion, die sich ab und an mal abmelden. Die haben dann auch da stehen "kein Zustand verfügbar" Aber löschen will ich die ja nicht, die funktionieren ja noch, müßen halt nur einmal aus und wieder eingeschaltet werden.
Was ich aber mal angefangen habe, alle Entitäten, die zwar was anzeigen, messen, aber deren Werte man nicht speichern will, von der Aufzeichnung ausgeschlossen.
Thermometer. Was Interessiert mich nächste Woche noch, wie der Batteriezustand war. Der muß nicht aufgezeichnet werden.
Die Spannung, die mir diverse Geräte liefern. Ist vollkommen uninteressant, ob die nun 235 Volt oder 230 Volt gewesen war. Also auch nicht Aufzeichnen.
Da gibt es hunderte, wenn nicht tausende Entitäten, die gar nicht Aufgezeichnet werden müßten.
 
Um es nochmal ganz klar zu sagen, purge_keep_days: 1100 ist Quatsch, bläht die DB auf, verlangsamt HA, macht Probleme, wenn man selbige mal reparieren muss usw.
Langzeitdaten (measurements) werden immer aufgehoben, später zusammengefasst von minütlichen u.ä. Werten auf stündlich, täglich o.ä., hab die genauen Intervalle nicht im Kopf.
 
Da gibt es hunderte, wenn nicht tausende Entitäten, die gar nicht Aufgezeichnet werden müßten.

Das ist sicher richtig. Aber wer macht sich die Arbeit, wie aschenputtel alles sauber zu trennen ?
Ich habe das auf 800 gesetzt, weil ich nicht nur die daten vom energie dashboard lanzeit sehen will. Beispiel: ich will mir die aussentemperatur eines gesamten jahres anzeigen lassen. Kann so sehen, wie viele tage es kälter als 0 Grad war.
Anderererseits bin ich dabei, den smarten Steckdosen ne zusätzliche temperaturen entität zu entlocken. Macht keinen Sinn, diese Temperaturen langzeit zu speichern.

Ich habe den Arbeitsspeicher des futro s920 auf max 16 gb gesetzt und eine grosse ssd festplatte. Schon richtig, die vielen daten bremsen home assistant aus.
 
Zuletzt bearbeitet:
Sauber trennen wird sicher schwierig oder man nimmt sich ab und an mal ein paar Minuten und schmeißt wieder ein paar Sensoren raus, die nicht aufgezeichnet werden müssen.
Man muß ja auch nicht jeden Sensor einzeln raus schmeißen, man kann auch ganze Gruppen raus nehmen.
Beispiel: switch.licht.*
Oder so ähnlich. Dann wird halt alles, was ein Switch ist und Licht schaltet nicht mehr aufgezeichnet.
Außer natürlich, ihr wollt wissen, ob eure bessere Hälfte nachts mal wieder den Kühlschrank geplündert hat. :D

Aber ich muß auch sagen, das durch das ganze herumbasteln und ausprobieren sich eine menge Müll in HA angesammelt hat.
Da hatte man sich mal einen Helfer angelegt, um was zu testen, löst es später aber anders. Aber der Helfer bleibt, weil vergessen.
Und wenn man den Wochen später sieht, fragt man sich "Wird der noch irgendwo verwendet ? Was passiert, wenn ich den einfach lösche ?"
Ja, ich weiß, in den Entwicklerwerkzeugen kann man nachsehen, wo ein Sensor noch alles eingesetzt wird, aber auch das ist eine Mühselige Arbeit.
In Anbetracht dessen, das meine Datenbank aber schon 73,6 GB groß ist und jeden Tag um fast 0,1 GB größer wird, muß ich mir da schon was einfallen lassen.
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Neueste Beiträge

Letzte Anleitungen

Statistik des Forums

Themen
5.912
Beiträge
57.731
Mitglieder
5.870
Neuestes Mitglied
kicknick
Zurück
Oben