[vz-users] Aggregation (minute) schlägt fehl
Michael Hartmann
hartmann-micha at web.de
Mo Mär 20 15:03:34 CET 2023
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/20230320/4fb951de/attachment.html>
Mehr Informationen über die Mailingliste volkszaehler-users