[vz-users] Aggregation (minute) schlägt fehl
Michael Hartmann
hartmann-micha at web.de
Di Mär 21 18:31:06 CET 2023
Ich habe den von René verlinkten thread durchgelesen. Ja, das ist das gleiche Problem wie bei mir. Nur das der Workaround den er seinerzeit durchgeführt hat,, nämlich das Aggregate-Table zu löschen und neu aufzubauen bei mir nur temporär wirkt.
Der Fehler kommt nach einiger Zeit wieder.
Leider scheint es seither keine Lösung dafür zu geben oder auch nur eine konkrete Ursache bekannt zu sein.
Grüße
Micha
Von: volkszaehler-users [mailto:volkszaehler-users-bounces at demo.volkszaehler.org] Im Auftrag von René W
Gesendet: Montag, 20. März 2023 15:10
An: volkszaehler.org - users
Betreff: Re: [vz-users] Aggregation (minute) schlägt fehl
Ich hatte „damals“ auch schon diese nervige Meldung:
https://demo.volkszaehler.org/pipermail/volkszaehler-users/2019-June/013374.html
Vielleicht sind dort ja noch ein paar Hinweise. Ich selber nutze VZ nicht mehr dafür.
Gruß René
Michael Hartmann <hartmann-micha at web.de> schrieb am Mo. 20. März 2023 um 15:03:
Hallo Christian,
ich hatte erst an negative Werte gedacht und keine um den „Ausstiegszeitpunkt“ gefunden. Das scheidet aber auch aus, da sich die Werte im Zähler befinden und somit keine Division durch Null hervorrufen können.
Was mich irritiert ist das nach Löschen der aggregierten Daten deren Neuerstellung fehlerfrei durchläuft.
Kann jemand aus der Fehlermeldung erkennen um welchen Kanal (Channel_ID) es gehen könnte?
Grüße
Micha
Von: volkszaehler-users [mailto:volkszaehler-users-bounces at demo.volkszaehler.org] Im Auftrag von Christian Lange
Gesendet: Montag, 20. März 2023 11:29
An: volkszaehler-users at demo.volkszaehler.org
Betreff: Re: [vz-users] Aggregation (minute) schlägt fehl
Hi Micha,
ich hab leider keine Ahnung, wie die Datenbank aussieht (ich nutze selbst eine andere), aber der Fehler sagt aus, dass eine Division durch 0 vorliegt.
Die einzige Zeile in der SQL Query, die mir da ins Auge sticht ist diese hier:
> COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) - MIN(agg.prev_timestamp)),
Das Maximum des Timestamps minus dem Minimum des vorherigen Timestamps aus der (on the fly) erzeugten "agg" Tabelle sind zusammen 0. Daher klappt die Division und damit die SQL Query nicht. Die Daten stammen (soweit ich das sehen kann) aus der "data" Tabelle. Vielleicht fällt dir ja da etwas auf in den Daten bei den Timestamps. Den Rest überlasse ich den Experten, die das Tool so im Einsatz haben ;)
Viel Erfolg,
Christian
Am 20.03.2023 um 10:37 schrieb Michael Hartmann:
Hallo,
ich hole das hier noch einmal vor, da es ziemliche nervt.
Via cronjob lasse ich alle 10min eine Aggregation auf die Minute laufen. Bereits vor einigen Wochen ist diese dann plötzlich mit der folgenden Fehlermeldung ausgestiegen:
In AbstractMySQLDriver.php line 128:
An exception occurred while executing 'REPLACE INTO aggregate (channel_id,
type, timestamp, value, count) SELECT channel_id, ? AS type, MAX(agg.timest
amp) AS timestamp, COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) - M
IN(agg.prev_timestamp)), AVG(agg.value)) AS value, COUNT(agg.value) AS coun
t FROM ( SELECT channel_id, timestamp, value, value * (timestamp - @prev_ti
mestamp) AS val_by_time, COALESCE(@prev_timestamp, 0) AS prev_timestamp, @p
rev_timestamp := timestamp FROM data CROSS JOIN (SELECT @prev_timestamp :=
UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%d %H:%
i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ? AND aggreg
ate.channel_id = ?) AS vars WHERE channel_id = ? AND timestamp >= IFNULL((S
ELECT UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp) / 1000, "%Y-%m-%
d %H:%i:00"), INTERVAL 1 minute)) * 1000 FROM aggregate WHERE type = ? AND
aggregate.channel_id = ? ), 0) AND timestamp < UNIX_TIMESTAMP(DATE_FORMAT(N
OW(), "%Y-%m-%d %H:%i:00")) * 1000 ) AS agg GROUP BY channel_id, YEAR(FROM_
UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000)), HOUR(F
ROM_UNIXTIME(timestamp/1000)), MINUTE(FROM_UNIXTIME(timestamp/1000))' with
params [1, 1, "3", "3", 1, "3"]:
SQLSTATE[22012]: Division by zero: 1365 Division by 0
In Exception.php line 18:
SQLSTATE[22012]: Division by zero: 1365 Division by 0
In PDOStatement.php line 117:
SQLSTATE[22012]: Division by zero: 1365 Division by 0
Die Aggregation auf Stunde und Tag bereitet (bisher) keine Probleme.
Beim letzten Mal hatte ich die Aggregationstabelle gelöscht und neu aufgebaut. Nach einigen Wochen kommt der Fehler nun wieder.
Kann mir jemand erklären wo das Problem liegt? Die Fehlermeldung kann ich nicht interpretieren.
Viele Grüße
Micha
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20230321/e64787ed/attachment.html>
Mehr Informationen über die Mailingliste volkszaehler-users