FHEM hängt, wenn DBlog ausgelastet

Begonnen von NehCoy, 26 August 2019, 11:45:05

Vorheriges Thema - Nächstes Thema

NehCoy

Hallo!

Ich habe ein wenig mit der Datenbank (MariaDB) "gespielt" und einige Einträge geändert.
Um genau zu sein, habe ich Gerätenamen in der Datenbank geändert, weil ich diese in FHEM geändert habe und in den SVG Plots nichts mehr angezeigt wurde (https://forum.fhem.de/index.php?topic=103261).

Danach ist mir dann folgendes aufgefallen:
Wenn eine Webseite mit Plots aufgerufen wird, hängt FHEM so lange bis die Datenbank die Anfrage beantwortet hat.
Das mag zwar belanglos klingen, aber eine Anfrage dauerte je Datensatz mehrere Minuten was sich bei 7 Datensätzen in den zwei Plots ganz schön aufsummiert hat.
MariaDB [fhem]> SHOW FULL PROCESSLIST;
+----+--------+-----------+------+---------+------+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+
| Id | User   | Host      | db   | Command | Time | State        | Info                                                                                                                                                                                                                                                                                                                                                                                                                               | Progress |
+----+--------+-----------+------+---------+------+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+
|  2 | user| localhost | fhem | Sleep   | 1344 |              | NULL                                                                                                                                                                                                                                                                                                                                                                                                                               |    0.000 |
| 51 | user| localhost | fhem | Query   |   95 | Sending data | SELECT
                  DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i:%s'),
                  DEVICE,
                  READING,
                  VALUE
                   FROM history WHERE 1=1 AND DEVICE  = 'knx.Wetter.Helligkeit.Sued' AND READING = 'state' AND TIMESTAMP >= STR_TO_DATE('2019-08-25 00:00:00', '%Y-%m-%d %H:%i:%s') AND TIMESTAMP <= STR_TO_DATE('2019-08-26 00:00:00', '%Y-%m-%d %H:%i:%s') ORDER BY TIMESTAMP |    0.000 |
| 52 | user| localhost | fhem | Query   |    0 | init         | SHOW FULL PROCESSLIST                                                                                                                                                                                                                                                                                                                                                                                                              |    0.000 |
+----+--------+-----------+------+---------+------+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+
3 rows in set (0.01 sec)


Zwar mag mein manueller Eingriff Ursache für die lange Bearbeitungszeit sein, aber das Systemverhalten sehe ich dennoch als kritisch.
Geht es nicht, das FHEM die Queries in einem eigenen Thread startet und die Plots nachträglich anzeigt, sobald diese von der Datenbank beantwortet wurden?
Hatte gestern echt leicht Panik, das ich mein FHEM zerschossen habe.

Danke & Grüße
NehCoy

DS_Starter

Dafür gibt es bereits mögliche Einstellungen.
Für Schreibvorgänge gibt es das attr asynchMode und bezüglich SVG Erstellung bzw. Lesevorgängen gibt es das attr plotfork in den FHEMWEB devices.
Führe im DbLog mal ein set configCheck aus. Der schreibt einiges aus.
Daneben gibt es noch DbRep mit dem du viele Reportings und Datenpflegemassnahmen non-blocking ausführen kannst.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

NehCoy

Hallo Heiko,

danke für die Antwort und die Tipps!

Bzgl. plotfork:
In der FHEM Referenz steht:
Zitatplotfork
Falls gesetzt, dann werden bestimmte Berechnungen (z.Bsp. SVG und RSS) auf nebenläufige Prozesse verteilt. Voreinstellung ist 0. Achtung: nicht auf Systemen mit wenig Hauptspeicher verwenden.
Was heißt "wenig Hauptspeicher"? Kann man das auch in MB/GB angeben? Verwende einen Raspberry PI B+ mit 512 MB RAM. Frei sind angeblich nur 43 MB.
top - 20:22:07 up 1 day,  3:50,  1 user,  load average: 0.13, 0.07, 0.06
Tasks:  67 total,   1 running,  39 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  1.3 sy,  0.0 ni, 97.7 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :   443084 total,    43560 free,   238536 used,   160988 buff/cache
KiB Swap:   102396 total,     5000 free,    97396 used.   138104 avail Mem


Das mit dem asynchMode -Attribut schaue ich mir auch noch an.

Grüße
NehCoy

DS_Starter

Klingt nach ein bisschen wenig RAM. Aber muss nicht sein, kommt auf dein Gesamtsystem an.
asynchMode arbeitet nach einem ähnlichen Prinzip. Auch hier wird RAM benötigt.

Probiers einfach und beobachte deinen Speicher und Swap.

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter