<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Hallo Michael,<br>
<br>
wie Christian unten schon schreibt, kommt der Fehler vermutlich von
folgender Zeile:<br>
<br>
> COALESCE( SUM(agg.val_by_time) / (MAX(agg.timestamp) -
MIN(agg.prev_timestamp)), <br>
die zur Division durch Null führt.<br>
<br>
Wenn ich den SQL Code richtig verstehe, wird zunächst in der
aggregate Tabelle der jüngste Timestamp gesucht, die glatte Minute
dazu berechnet und eine Minute aufaddiert - nennen wir das mal T1.
Das ist der Startpunkt für die Aggregation der neuen Daten, die dann
angehängt werden.<br>
Die Division durch Null kann eigentlich nur genau an dieser Stelle
T1 passieren, da T1 dann als prev_timestamp verwendet wird.<br>
Wenn dann der Sonderfall eintritt, dass die neuen Daten nur einen
Datenwert für den Minutenslot T1 haben und noch dazu dieser
Timestamp (der ja in Millisekunden gezählt wird) auch genau auf eine
glatte Minute fällt, dann wird der Nenner Null. Die
Wahrscheinlichkeit ist ziemlich klein, es scheint aber zu passieren.<br>
<br>
Du solltest das in deinem Datensatz nachvollziehen können.<br>
Wenn dein Datensatz so aussieht, wird das aggregate nie mehr
klappen, solange du die Daten nicht manipulierst (z.B. ein paar
Milisekunden auf den Timestamp addieren).<br>
<br>
Löscht man die aggregate Tabelle und berechnet sie neu, kommt man
über diese Stelle hinweg, weil da ja nicht "angestückelt" wird.<br>
<br>
Falls es das nicht ist: Eine andere mögliche Ursache ist folgender
Teil des SQL Codes:<br>
"SELECT channel_id, timestamp, value, value * (timestamp -
@prev_timestamp) AS val_by_time, COALESCE(@prev_timestamp, 0) AS
prev_timestamp, @prev_timestamp := timestamp"<br>
da die MariaDB Dokumentation sagt: "It is unsafe to read a
user-defined variable and set its value in the same statement
(unless the command is SET), because the order of these actions is
undefined."<br>
Genau das passiert nämlich. Wenn die Zweisung @prev_timestamp :=
timestamp vor der COALESCE(@prev_timestamp, 0) ausgeführt wird,
ergibt sich ebenfalls das Problem der Division durch Null, falls man
nur einen Datenwert im Minutenslot hat - dann auch unabhängig von
der Nahtstelle.<br>
<br>
Gruss<br>
Manfred<br>
<br>
<div class="moz-cite-prefix">Am 21.03.2023 um 18:31 schrieb Michael
Hartmann:<br>
</div>
<blockquote type="cite"
cite="mid:007001d95c1a$eb5806a0$c20813e0$@web.de">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Microsoft Word 14 (filtered
medium)">
<style>@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}p
{mso-style-priority:99;
mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:12.0pt;
font-family:"Times New Roman","serif";}p.m-2024002216697058698msoplaintext, li.m-2024002216697058698msoplaintext, div.m-2024002216697058698msoplaintext
{mso-style-name:m_-2024002216697058698msoplaintext;
mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:12.0pt;
font-family:"Times New Roman","serif";}span.E-MailFormatvorlage19
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri","sans-serif";
mso-fareast-language:EN-US;}div.WordSection1
{page:WordSection1;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">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.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Der
Fehler kommt nach einiger Zeit wieder.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Leider
scheint es seither keine Lösung dafür zu geben oder auch nur
eine konkrete Ursache bekannt zu sein.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Grüße<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Micha<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">Von:</span></b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
volkszaehler-users
[<a class="moz-txt-link-freetext" href="mailto:volkszaehler-users-bounces@demo.volkszaehler.org">mailto:volkszaehler-users-bounces@demo.volkszaehler.org</a>] <b>Im
Auftrag von </b>René W<br>
<b>Gesendet:</b> Montag, 20. März 2023 15:10<br>
<b>An:</b> volkszaehler.org - users<br>
<b>Betreff:</b> Re: [vz-users] Aggregation (minute) schlägt
fehl<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Ich hatte „damals“ auch schon diese
nervige Meldung: <o:p></o:p></p>
<div>
<p class="MsoNormal"><a
href="https://demo.volkszaehler.org/pipermail/volkszaehler-users/2019-June/013374.html"
moz-do-not-send="true" class="moz-txt-link-freetext">https://demo.volkszaehler.org/pipermail/volkszaehler-users/2019-June/013374.html</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Vielleicht sind dort ja noch ein paar
Hinweise. Ich selber nutze VZ nicht mehr dafür.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Gruß René<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">Michael Hartmann <<a
href="mailto:hartmann-micha@web.de"
moz-do-not-send="true" class="moz-txt-link-freetext">hartmann-micha@web.de</a>>
schrieb am Mo. 20. März 2023 um 15:03:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC
1.0pt;padding:0cm 0cm 0cm
6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D">Hallo Christian,</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D">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.</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D">Was mich irritiert ist das
nach Löschen der aggregierten Daten deren
Neuerstellung fehlerfrei durchläuft.</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D">Kann jemand aus der
Fehlermeldung erkennen um welchen Kanal
(Channel_ID) es gehen könnte?</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D">Grüße</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D">Micha</span><o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="color:#1F497D"> </span><o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #B5C4DF
1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">Von:</span></b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
volkszaehler-users [mailto:<a
href="mailto:volkszaehler-users-bounces@demo.volkszaehler.org"
target="_blank" moz-do-not-send="true"
class="moz-txt-link-freetext">volkszaehler-users-bounces@demo.volkszaehler.org</a>]
<b>Im Auftrag von </b>Christian Lange<br>
<b>Gesendet:</b> Montag, 20. März 2023 11:29<br>
<b>An:</b> <a
href="mailto:volkszaehler-users@demo.volkszaehler.org"
target="_blank" moz-do-not-send="true"
class="moz-txt-link-freetext">volkszaehler-users@demo.volkszaehler.org</a><br>
<b>Betreff:</b> Re: [vz-users] Aggregation
(minute) schlägt fehl</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p>Hi Micha, <o:p></o:p></p>
<p>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. <o:p></o:p></p>
<p>Die einzige Zeile in der SQL Query, die mir da ins
Auge sticht ist diese hier:<o:p></o:p></p>
<p>> COALESCE( SUM(agg.val_by_time) /
(MAX(agg.timestamp) - MIN(agg.prev_timestamp)), <o:p></o:p></p>
<p>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 ;)<o:p></o:p></p>
<p>Viel Erfolg,<br>
Christian <o:p></o:p></p>
<p> <o:p></o:p></p>
<p> <o:p></o:p></p>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Am
20.03.2023 um 10:37 schrieb Michael Hartmann:<o:p></o:p></p>
</div>
<blockquote
style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Hallo,<o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">ich
hole das hier noch einmal vor, da es ziemliche
nervt.<o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div style="border:none;border-bottom:solid
windowtext 1.0pt;padding:0cm 0cm 1.0pt 0cm">
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">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:<o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US">In AbstractMySQLDriver.php line
128:</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> </span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> An exception occurred while
executing 'REPLACE INTO aggregate (channel_id,</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> type, timestamp, value, count)
SELECT channel_id, ? AS type, MAX(agg.timest</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> amp) AS timestamp, COALESCE(
SUM(agg.val_by_time) / (MAX(agg.timestamp) - M</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> IN(agg.prev_timestamp)),
AVG(agg.value)) AS value, COUNT(agg.value) AS
coun</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> t FROM ( SELECT channel_id,
timestamp, value, value * (timestamp - @prev_ti</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> mestamp) AS val_by_time,
COALESCE(@prev_timestamp, 0) AS prev_timestamp,
@p</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> rev_timestamp := timestamp FROM
data CROSS JOIN (SELECT @prev_timestamp :=</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US">
UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp)
/ 1000, "%Y-%m-%d %H:%</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> i:00"), INTERVAL 1 minute)) *
1000 FROM aggregate WHERE type = ? AND aggreg</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> ate.channel_id = ?) AS vars WHERE
channel_id = ? AND timestamp >= IFNULL((S</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> ELECT
UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(MAX(timestamp)
/ 1000, "%Y-%m-%</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> d %H:%i:00"), INTERVAL 1 minute))
* 1000 FROM aggregate WHERE type = ? AND</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> aggregate.channel_id = ? ), 0)
AND timestamp < UNIX_TIMESTAMP(DATE_FORMAT(N</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> OW(), "%Y-%m-%d %H:%i:00")) *
1000 ) AS agg GROUP BY channel_id, YEAR(FROM_</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> UNIXTIME(timestamp/1000)),
DAYOFYEAR(FROM_UNIXTIME(timestamp/1000)), HOUR(F</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> ROM_UNIXTIME(timestamp/1000)),
MINUTE(FROM_UNIXTIME(timestamp/1000))' with</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> params [1, 1, "3", "3", 1, "3"]:</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> </span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> SQLSTATE[22012]: Division by
zero: 1365 Division by 0</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> </span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> </span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US">In Exception.php line 18:</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> </span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> SQLSTATE[22012]: Division by
zero: 1365 Division by 0</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> </span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> </span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US">In PDOStatement.php line 117:</span><o:p></o:p></p>
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> </span><o:p></o:p></p>
<div style="border:none;border-bottom:solid
windowtext 1.0pt;padding:0cm 0cm 1.0pt 0cm">
<p class="m-2024002216697058698msoplaintext"><span
lang="EN-US"> SQLSTATE[22012]: Division by
zero: 1365 Division by 0</span><o:p></o:p></p>
</div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
lang="EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Die
Aggregation auf Stunde und Tag bereitet (bisher)
keine Probleme.<o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Beim
letzten Mal hatte ich die Aggregationstabelle
gelöscht und neu aufgebaut. Nach einigen Wochen
kommt der Fehler nun wieder.<o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Kann
mir jemand erklären wo das Problem liegt? Die
Fehlermeldung kann ich nicht interpretieren.<o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Viele
Grüße<o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Micha<o:p></o:p></p>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
<br>
</body>
</html>