FHEM Forum

FHEM => Sonstiges => Thema gestartet von: kaizo am 21 November 2018, 18:29:08

Titel: DbRep - get initial structure information of database
Beitrag von: kaizo am 21 November 2018, 18:29:08
Hallo zusammen,

habe meine SQL-Datenbank auf einen anderen, etwas leistungsfähigeren Server ungezogen. Seit diesem läuft mein DbRep nicht mehr. Ich bekomme im Log die Meldung "DbRep Solarertrag_stat - get initial structure information of database "fhem", remaining attempts: -6"
Die Datenbank ist recht groß, jedoch hatte dieses auf dem alten Server keinen Einfluß. Irgendwie geht's danach nicht weiter.

Auch bei Verbose 5 kann ich aus den Meldungen nichts ableiten, warum es nicht mehr läuft.

Weiß hier jemand einen Rat?

Gruß
Kai
Titel: Antw:DbRep - get initial structure information of database
Beitrag von: DS_Starter am 21 November 2018, 18:40:26
Hallo Kai,

gib mal bitte ein paar mehr Infos, also ein List vom Device.
Was passiert denn wenn du ein "get minTimestamp" ausführst ?

Funktioniert denn das verbundene DbLog-Device fehlerfrei ?
Beim DbLog bitte ein "get ... configCheck" ausführen und das Ergebnis posten.

Grüße,
Heiko
Titel: Antw:DbRep - get initial structure information of database
Beitrag von: kaizo am 21 November 2018, 18:56:41
Gerne.

[text gelöscht]
Titel: Antw:DbRep - get initial structure information of database
Beitrag von: DS_Starter am 21 November 2018, 19:10:56
Ok, bitte mach ein Update auf die aktuelle Version 8.9.6 und setzte dann das Attribut "fastStart = 1".
Danach neuer Restart.

Und bitte noch die restlichen Infos die ich in #1 geschrieben hatte ...
Titel: Antw:DbRep - get initial structure information of database
Beitrag von: kaizo am 21 November 2018, 19:37:03
Oh, sorry, da hat was nicht geklappt beim Kopieren.
Sollte man nicht am Tablet machen...
Habe den dritten Post etwas gelöscht, damit das nicht zu lang wird.

[ schon wieder alles gelöscht, da fehlt das meiste]
Titel: Antw:DbRep - get initial structure information of database
Beitrag von: DS_Starter am 21 November 2018, 19:43:47
ZitatOh, sorry, da hat was nicht geklappt beim Kopieren.
Macht ja nix, habe mich auch verschrieben ... aktuelle Version ist 8.9.6. Die Infos fehlen trotzdem noch  ;)

Titel: Antw:DbRep - get initial structure information of database
Beitrag von: kaizo am 21 November 2018, 19:45:27
Da klappt was nicht...in der Vorschau ist alles ok.
3. Versuch.



wieder gelöscht. Noch ein Versuch
Titel: Antw:DbRep - get initial structure information of database
Beitrag von: kaizo am 21 November 2018, 19:49:10
So, da die Beiträge scheinbar zu lang werden habe ich  nun die Ausgaben (und meinen Kommentar) als Anhang hier angehangen...

Hoffe, es klappt nun.

Aktuelle Version habe ich nun
Internals:
   DATABASE   fhem
   DEF        logdb
   LASTCMD    sumValue display
   MODEL      Client
   NAME       Solarertrag_stat
   NOTIFYDEV  global,Solarertrag_stat
   NR         397
   NTFY_ORDER 50-Solarertrag_stat
   ROLE       Client
   STATE      disconnected »; ProcTime:  sec
   TYPE       DbRep
   UTF8       1
   VERSION    8.9.6
Titel: Antw:DbRep - get initial structure information of database
Beitrag von: DS_Starter am 21 November 2018, 20:07:06
Ja, jetzt hats geklappt.

Zitat
bei minTimestamp läuft das alles los, danach kommt ein Timeout nach 2min.
Attribut timeout hatte ich auf 900 gestellt:
2018.11.21 18:55:25 1: DbRep Solarertrag_stat -> BlockingCall DbRep_getInitData pid:30279 Timeout: process terminated
Sieht tatsächlich nach einem timeout aus.
Wundere dich bitte nicht, für die spezielle Funktion minTimestamp ist aus historischen Gründen der Timeout auf 2 min eingestellt. Das kann ich jetzt problemlos abändern. Allerdings sind 2min für eine solche Funktion wirklich viel.

Der configCheck zeigt, dass deine Datenbank nicht (mehr) die richtigen Feldgrößen hat. Die solltest du unbedingt anpassen. Wie das geht, steht auch im configCheck in den Erläuterungen.

Ich werde dir gleich eine DbRep-Version bereitstellen, in der das timeout Attribut auch für minTimestamp gilt.
Aber es wird vermutlich nicht das eigentliche Problem lösen.

DbLog muss uns mal die Abarbeitungszeiten zeigen. Setz dazu bitte das Attribut "showproctime". Dann ist das Reading "sql_processing_time" interessant. Meine Vermutung ist dass deine DB viel zu langsam ist.
Kannst du ein wenig beschreiben wie dein System mit der DB aufgebaut ist ?

Titel: Antw:DbRep - get initial structure information of database
Beitrag von: kaizo am 21 November 2018, 20:28:20
Meine Datenbank läuft auf einer NAS mit OpenMediaVault, einer WD myCloud. Wenn eine Abfrage läuft liegt die CPU bei ca. 25%, und Speicher ist zu 23% belegt.

Die Feldgrößen würde ich anpassen, habs gelesen, aber die Datenbank schreibt erst alles in ein Temp-File. Das dauert leider extrem lange, vielleicht muss ich das mal bei Gelegenheit auf meinem Desktop-PC machen.

Showproc ist schon ein, bisher haben die Abfragen meist 30s gedauert. Habe extra schon den Zeitraum verkürzt, aber es reicht imer noch nicht.

Bei procinfo werden mittlerweile 6 Prozesse mit min(Timestamp) angezeigt, progress jeweils 0.00

PS. Danke schon mal für deine Hilfe!
DbRep ist ein gutes Tool
Titel: Antw:DbRep - get initial structure information of database
Beitrag von: DS_Starter am 21 November 2018, 20:43:36
Ja, ich schätze dass deine DB so um die 20GB groß sein dürfte, dann dauert die Strukturanpassung. Alternativ könntest du im DbLog die Attribute "col.*" benutzen um die im DbLOg verwendeten Breiten an die DB anzupassen.

Mit dem Attribut "showproctime" meinte ich es auf dem DbLog-Device zu setzen (DbRep hat es auch). Vllt. bekommt man damit schon ein Gefühl.

Es freut mich sehr dass DbRep dir hilfreich ist :)

Titel: Antw:DbRep - get initial structure information of database
Beitrag von: DS_Starter am 21 November 2018, 21:04:06
Sorry, hat etwas länger gedauert.

Die neue Version kannst du bitte aus contrib downloaden:

https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter  (Downloadbutton benutzen)

Nun zieht auch timeout bei minTimestamp.
Außerdem sieht man mit verbose 3 gleich im Log wie lange die initiale Ermittlung der DB-Werte gedauert hat.

Nach dem Download am Besten restarten und dann schauen wir mal weiter.
Titel: Antw:DbRep - get initial structure information of database
Beitrag von: kaizo am 21 November 2018, 21:54:28
So, die neue Version  8.9.7 aus dem Trunk ist am Start.


Beim ersten Start kommt bei SumValue: Solarertrag_statdone »; ProcTime: 0.0389 sec

Das Logfile:
2018.11.21 21:43:52 3: DbRep test_dbrep - Initial data information retrieved successfully - total time used: 443.792255 seconds
2018.11.21 21:43:52 3: DbRep test_dbrep - Connectiontest to db mysql:database=fhem;host=192.168.x.xxx;port=3306 successful
2018.11.21 21:43:55 3: DbRep Solarertrag_stat - Initial data information retrieved successfully - total time used: 278.43319 seconds
2018.11.21 21:43:55 3: DbRep Solarertrag_stat - Connectiontest to db mysql:database=fhem;host=192.168.x.xx;port=3306 successful

Nun geht es wieder. Superschnell!

Habe die alten Zeitgrenzen wieder eingestellt, und siehe da: Auch das läuft wieder.
done »; ProcTime: 29.2386 sec  --> liegt also wieder bei den rd. 30sec.

Allerdings habe ich eine Sache machen müssen, ich habe per phpmyadmin die offenen Prozesse like "min(Timestamp)" beendet.
Ab da läuft es wieder.

Super! Ganz vielen Dank für Deine Unterstützung, nun ist (fast) alles wieder gut.
Als nächstes werde ich mich um die Funktionen zum Verringern der SQL-Datenbank mal kümmern, da ist Dein Modul ja auch hervorragend geeignet. Übrigens, die DB ist 11GB groß. Da wird zur Zeit immer noch zu viel reingeschrieben, trotz Einschränkungen.
Ach, und die Felder vergrößern. Das ist ja auch noch offen.

Ein Punkt noch am Ende: Könntest Du auch eine Aggregation für auf ein Jahr einbauen? Dann wäre es für mich ein leichtes, auch (in diesem Fall) den Solarertrag für die letzten Jahre zum Vergleichen zu ermitteln.

Super Support!




Titel: Antw:DbRep - get initial structure information of database
Beitrag von: DS_Starter am 21 November 2018, 22:02:47
Super  :)

Ich übernehme die Version nachher noch ins Repository, steht dann morgen früh im Update zur Verfügung.

Zitat
Ein Punkt noch am Ende: Könntest Du auch eine Aggregation für auf ein Jahr einbauen? Dann wäre es für mich ein leichtes, auch (in diesem Fall) den Solarertrag für die letzten Jahre zum Vergleichen zu ermitteln.
Ja, nehme ich auf meine ToDo-Liste. Diese Auswertung will ich bei mir und meiner PV auch noch integrieren.
Na dann noch viel Spaß und Erfolg !

EDIT: Vllt. noch ein Tipp. Es gibt ja den Befehl "syncStandby". Damit kann man sich eine Archivdatenbank aufbauen um seine PV-Daten für ausführliche Auswertungen aufzubewahren. In der Originaldatenbank brauchen dann nur noch Daten der letzten Monate liegen. Hat den Vorteil dass die produktive DB immer klein und superschnell bleibt.
Die Synchronisation kann nach dem Erstaufbau dann regelmäßig z.B. jede Stunde laufen ...

LG,
Heiko
Titel: Antw:DbRep - get initial structure information of database
Beitrag von: DS_Starter am 01 April 2019, 23:34:58
ZitatEin Punkt noch am Ende: Könntest Du auch eine Aggregation für auf ein Jahr einbauen? Dann wäre es für mich ein leichtes, auch (in diesem Fall) den Solarertrag für die letzten Jahre zum Vergleichen zu ermitteln.

Ich habe das Feature umgesetzt. Siehe -> https://forum.fhem.de/index.php/topic,53584.msg926062.html#msg926062

LG,
Heiko