Hohe CPU Last durch MySQL

Begonnen von robbe, 22 Mai 2014, 21:49:19

Vorheriges Thema - Nächstes Thema

robbe

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!

betateilchen

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
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

peterk_de

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.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

robbe

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 :-)

sky64

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

FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

robbe

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.

peterk_de

#6
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.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...