Hallo,
ich habe auf meinen Raspberry PI FHEM neu aufgesetzt. Als ich eine bestehende Datenbank zuerst vorsucht habe zu übernehmen hat FHEM nicht gestartet, weil MySQL nur auf die DB am zugreifen war. Ich habe somit im Anschluss mit einer neuen leeren Datenbank angefangen. Nun läuft das System über eine Woche und es ist sichtbar, dass die CPU Auslastung anwächst desto größer die Datenbank wird. Ebenfalls steigt die Zeit die für einen Neustart von FHEM benötigt wird.
Meine Frage daher an Euch:
- Kann dieses Problem beseitigt werden? Ich würde idealerweise alle Sensordaten in einer DB speichern.
- Gibt es eine brauchbare Alternative für diese Konfiguration. Bringt SQLite was oder existiert da das gleiche Problem? Oder soll bei der Konfiguration nur ein Flielog verwendet werden?
Danke!
Ich nehme an, Du redest von DbLog?
Du solltest einfach regelmäßig die Datenbank schließen und wieder neu öffnen. Dafür gibt es in DbLog den (fhem) set Befehl reopen. Der wird bei mir jede Nacht um 01:31 Uhr automatisch ausgeführt.
define DbLog_reopen at *01:31:00 set fhemDbLog reopen
Ich hatte dblog mit MySQL lange Zeit und hinreichend schnell am Laufen aufm Raspi. Mach mal:
attr mydblog DbLogType History
Und danach ein
shutdown restart
Das hat bei mir das Tempo der dblog-Ausführung mehr als verhundertfacht. Prüfen kannst du das mit:
apptime
Und dann FHEM ne Weile Laufen lassen - dann sammelt FHEM bis zum nächsten Neustart Ausführungszeiten aller Module, auch von DBlog. Wenn du ne Weile hast sammeln lassen, nochmal
apptime
Zum anzeigen. Am besten mal vor und nach der Änderung versuchen. Was bei mir nochmal mehr gebracht hatte waren in der MySQL-Relation Indizes auf Alle Spalten außer Type und Event zu setzen.
Hi,
das mit den Index macht schon Welten aus. Vielen Dank für den Hinweis. Vorher hat der PI 3-5 Minuten zum Neustart von FHEM gebraucht. Nachher 20-30 sek.
Jetzt mache ich mal einen Langzeit-Test :-)
Zitat von: peterk_de am 22 Mai 2014, 22:48:03
Was bei mir nochmal mehr gebracht hatte waren in der MySQL-Relation Indizes auf Alle Spalten außer Type und Event zu setzen.
Hallo
Ist das irgendwo beschrieben oder könntest Du die entsprechenden Befehle hier posten für Leute die nicht so fitt in MySQL sind ?
Gruß Ronald
Hi,
ich hab phpmysql verwendet. Dann damit in der Tabelle Indizes erstellt. Du musst die Punkte nur anklicken und den rödeln lassen. Details dazu siehst du im angehangenen Bild. Ich glaub der erste davon bringt nicht wirklich einen Mehrwert teste mal ohne. Falls es ohne gut ist lösche ich den bei mir auch. Je nach Größe der Datenbank kann das Erstellen aber etwas Zeit dauern.
Der erste ist ein Index auf das gesamte Tupel. Der bringt also nur Speed, wenn in einer Anfrage nach dem gesamten Tupel gesucht wird (also einer exakten Kombination aus Device,Event,Timestamp,...) . Das wird quasi nie der Fall sein, in FHEM ganz sicher nicht (maximal in PHPmyadmin oder ähnlichen Tools, aber auch da nur, wenn du keinen Primärschlüssel gesetzt hast) Kann man also wie du schon sagst getrost weglassen, frisst nur Speicher.
Edit: Direkt in MySql geht das so:
ALTER TABLE `history` ADD INDEX `Timestamp_Idx` (`TIMESTAMP`);
Wobei Timestamp_Idx ein frei wählbarer Bezeichner ist. Musst du dann für jede Spalte machen, ich empfehle wie gesagt Timestamp, Device und Reading.