FHEM Forum

FHEM - Hardware => Einplatinencomputer => Thema gestartet von: robbe am 22 Mai 2014, 21:49:19

Titel: Hohe CPU Last durch MySQL
Beitrag von: robbe am 22 Mai 2014, 21:49:19
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!
Titel: Antw:Hohe CPU Last durch MySQL
Beitrag von: betateilchen am 22 Mai 2014, 22:43:49
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
Titel: Antw:Hohe CPU Last durch MySQL
Beitrag von: peterk_de am 22 Mai 2014, 22:48:03
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.
Titel: Antw:Hohe CPU Last durch MySQL
Beitrag von: robbe am 22 Mai 2014, 23:26:59
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 :-)
Titel: Antw:Hohe CPU Last durch MySQL
Beitrag von: sky64 am 04 Juni 2014, 08:53:40
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

Titel: Antw:Hohe CPU Last durch MySQL
Beitrag von: robbe am 04 Juni 2014, 18:58:39
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.
Titel: Antw:Hohe CPU Last durch MySQL
Beitrag von: peterk_de am 04 Juni 2014, 21:01:50
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.