Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Hi Sven,hast Du den aktuellen Stand aus dem Git? Wenn ja- um welchen Sensortyp handelt es sich? vg Andreas 2013/9/17 Sven peitz sven.pe...@gmx.net Am 16.09.2013 20:45, schrieb Andreas Goetz: Hallo Rainer, 2013/9/16 Rainer Gauweiler volkszaeh...@moppl.inka.de Hallo zusammen, Am 16.09.2013 16:41, schrieb Andreas Goetz: Hallo Thorben, 2013/9/16 Thorben Thuermer r...@constancy.org mailto: r...@constancy.org On Mon, 16 Sep 2013 14:01:31 +0200 Jakob Hirsch j...@plonk.de mailto:j...@plonk.de wrote: Sven peitz, 2013-09-14 11:07: $result1=mysql_query(SELECT value FROM data WHERE id = (select max(id) FROM data WHERE channel_id LIKE '14'));... Allerdings sollte man nicht ohne Grund direkt auf der DB arbeiten. Das Vorgehen wie von Andreas Götz ist auch deutlich einfacher (Abfrage mit from=now). from=now... funktioniert doch aber wie gehabt nur bei erfassung absoluter staende. ansonsten war die methode doch from=x seconds ago...? also so, dass im im angegebenen zeitraum (mit now = nur aktuelle sekunde) genug werte erfasst sind, damit der interpreter in der middleware daraus etwas berechnen kann. also bei s0-zaehlern mindestens zwei impulse, etc... oder wurde da middleware-seitig was geandert? - Thorben Das sollte funktionieren da die MW (schon immer?) mittels zweier SQL-Queries den jeweils letzten und nächsten Datenpunkt außer des angefragten Zeitraumes ermitteln und from... to... entsprechend erweitern. Für now() gäbe es also immer den aktuellen und letzten Timestamp und damit die Möglichkeit einen aktuellen Periodenverbrauch zu berechnen. Tut bei mir nicht und tat es noch nie: {version:0.2,data:{uuid:*snip*,average:0,consumption:0,rows:0}} Wir hatten da auch auf dem Raspi Probleme und haben damals den Zeitraum erweitert, damit sicher Daten da waren. Aber gab es nicht auch kürzlich einen Patch der das Verhalten gebaut hat? Meine Installation hier ist ca ein Jahr alt. Du hast Recht. Was ich geschrieben habe stimmt zwar, allerdings ist der Code noch nicht im Repository angekommen, sondern steht noch in meinem Pull Request: https://github.com/volkszaehler/volkszaehler.org/pull/47 Das Problem ist, dass die MW ohne diese Fixes je nach Sensortyp auch mal 3 Tuple braucht um etwas sinnvolles zu liefern. Mit Pull Request sind es immer genau zwei Tupel die benötigt werden, damit klappt dann auch die Abfrage per now. now - x seconds ist keine allgemeingültige Lösung da man ja nicht wissen kann wann ein Sensor Daten liefert... vg Andreas Hallo, vielen Dank für eure Antworten,. seit eben ist mein sql Zugang beim Provider wieder frei und ich kann weiter testen. Ein from=now bringt bei mit folgendes: {version:0.2,data:{uuid:**snip**,average:0,consumption:0,rows:0}} Ein select value from data where channel_id=14 order by timestamp desc limit 1; ist wirklich schnell und bring den aktuellen Wert zu Tage. Ich hoffe mein Provider fühlt sich damit nicht wieder überlastet. Ein from=3seconds%20ago funktioniert auch und ist schnell. Mal sehen was geschickter Weise zu verwenden ist. Viele Grüße Sven
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Hi Sven, hast Du den aktuellen Stand aus dem Git? Wenn ja- um welchen Sensortyp handelt es sich? vg Andreas 2013/9/17 Sven peitz sven.pe...@gmx.net Am 16.09.2013 20:45, schrieb Andreas Goetz: Hallo Rainer, 2013/9/16 Rainer Gauweiler volkszaeh...@moppl.inka.de Hallo zusammen, Am 16.09.2013 16:41, schrieb Andreas Goetz: Hallo Thorben, 2013/9/16 Thorben Thuermer r...@constancy.org mailto: r...@constancy.org On Mon, 16 Sep 2013 14:01:31 +0200 Jakob Hirsch j...@plonk.de mailto:j...@plonk.de wrote: Sven peitz, 2013-09-14 11:07: $result1=mysql_query(SELECT value FROM data WHERE id = (select max(id) FROM data WHERE channel_id LIKE '14'));... Allerdings sollte man nicht ohne Grund direkt auf der DB arbeiten. Das Vorgehen wie von Andreas Götz ist auch deutlich einfacher (Abfrage mit from=now). from=now... funktioniert doch aber wie gehabt nur bei erfassung absoluter staende. ansonsten war die methode doch from=x seconds ago...? also so, dass im im angegebenen zeitraum (mit now = nur aktuelle sekunde) genug werte erfasst sind, damit der interpreter in der middleware daraus etwas berechnen kann. also bei s0-zaehlern mindestens zwei impulse, etc... oder wurde da middleware-seitig was geandert? - Thorben Das sollte funktionieren da die MW (schon immer?) mittels zweier SQL-Queries den jeweils letzten und nächsten Datenpunkt außer des angefragten Zeitraumes ermitteln und from... to... entsprechend erweitern. Für now() gäbe es also immer den aktuellen und letzten Timestamp und damit die Möglichkeit einen aktuellen Periodenverbrauch zu berechnen. Tut bei mir nicht und tat es noch nie: {version:0.2,data:{uuid:*snip*,average:0,consumption:0,rows:0}} Wir hatten da auch auf dem Raspi Probleme und haben damals den Zeitraum erweitert, damit sicher Daten da waren. Aber gab es nicht auch kürzlich einen Patch der das Verhalten gebaut hat? Meine Installation hier ist ca ein Jahr alt. Du hast Recht. Was ich geschrieben habe stimmt zwar, allerdings ist der Code noch nicht im Repository angekommen, sondern steht noch in meinem Pull Request: https://github.com/volkszaehler/volkszaehler.org/pull/47 Das Problem ist, dass die MW ohne diese Fixes je nach Sensortyp auch mal 3 Tuple braucht um etwas sinnvolles zu liefern. Mit Pull Request sind es immer genau zwei Tupel die benötigt werden, damit klappt dann auch die Abfrage per now. now - x seconds ist keine allgemeingültige Lösung da man ja nicht wissen kann wann ein Sensor Daten liefert... vg Andreas Hallo, vielen Dank für eure Antworten,. seit eben ist mein sql Zugang beim Provider wieder frei und ich kann weiter testen. Ein from=now bringt bei mit folgendes: {version:0.2,data:{uuid:**snip**,average:0,consumption:0,rows:0}} Ein select value from data where channel_id=14 order by timestamp desc limit 1; ist wirklich schnell und bring den aktuellen Wert zu Tage. Ich hoffe mein Provider fühlt sich damit nicht wieder überlastet. Ein from=3seconds%20ago funktioniert auch und ist schnell. Mal sehen was geschickter Weise zu verwenden ist. Viele Grüße Sven
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Am 16.09.2013 20:45, schrieb Andreas Goetz: Hallo Rainer, 2013/9/16 Rainer Gauweiler volkszaeh...@moppl.inka.de mailto:volkszaeh...@moppl.inka.de Hallo zusammen, Am 16.09.2013 16:41, schrieb Andreas Goetz: Hallo Thorben, 2013/9/16 Thorben Thuermer r...@constancy.org mailto:r...@constancy.org mailto:r...@constancy.org mailto:r...@constancy.org On Mon, 16 Sep 2013 14:01:31 +0200 Jakob Hirsch j...@plonk.de mailto:j...@plonk.de mailto:j...@plonk.de mailto:j...@plonk.de wrote: Sven peitz, 2013-09-14 11:07: $result1=mysql_query(SELECT value FROM data WHERE id = (select max(id) FROM data WHERE channel_id LIKE '14'));... Allerdings sollte man nicht ohne Grund direkt auf der DB arbeiten. Das Vorgehen wie von Andreas Götz ist auch deutlich einfacher (Abfrage mit from=now). from=now... funktioniert doch aber wie gehabt nur bei erfassung absoluter staende. ansonsten war die methode doch from=x seconds ago...? also so, dass im im angegebenen zeitraum (mit now = nur aktuelle sekunde) genug werte erfasst sind, damit der interpreter in der middleware daraus etwas berechnen kann. also bei s0-zaehlern mindestens zwei impulse, etc... oder wurde da middleware-seitig was geandert? - Thorben Das sollte funktionieren da die MW (schon immer?) mittels zweier SQL-Queries den jeweils letzten und nächsten Datenpunkt außer des angefragten Zeitraumes ermitteln und from... to... entsprechend erweitern. Für now() gäbe es also immer den aktuellen und letzten Timestamp und damit die Möglichkeit einen aktuellen Periodenverbrauch zu berechnen. Tut bei mir nicht und tat es noch nie: {version:0.2,data:{uuid:*snip*,average:0,consumption:0,rows:0}} Wir hatten da auch auf dem Raspi Probleme und haben damals den Zeitraum erweitert, damit sicher Daten da waren. Aber gab es nicht auch kürzlich einen Patch der das Verhalten gebaut hat? Meine Installation hier ist ca ein Jahr alt. Du hast Recht. Was ich geschrieben habe stimmt zwar, allerdings ist der Code noch nicht im Repository angekommen, sondern steht noch in meinem Pull Request: https://github.com/volkszaehler/volkszaehler.org/pull/47 Das Problem ist, dass die MW ohne diese Fixes je nach Sensortyp auch mal 3 Tuple braucht um etwas sinnvolles zu liefern. Mit Pull Request sind es immer genau zwei Tupel die benötigt werden, damit klappt dann auch die Abfrage per now. now - x seconds ist keine allgemeingültige Lösung da man ja nicht wissen kann wann ein Sensor Daten liefert... vg Andreas Hallo, vielen Dank für eure Antworten,. seit eben ist mein sql Zugang beim Provider wieder frei und ich kann weiter testen. Ein from=now bringt bei mit folgendes: {version:0.2,data:{uuid:**snip**,average:0,consumption:0,rows:0}} Ein select value from data where channel_id=14 order by timestamp desc limit 1; ist wirklich schnell und bring den aktuellen Wert zu Tage. Ich hoffe mein Provider fühlt sich damit nicht wieder überlastet. Ein from=3seconds%20ago funktioniert auch und ist schnell. Mal sehen was geschickter Weise zu verwenden ist. Viele Grüße Sven
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Sven peitz, 2013-09-14 11:07: $result1=mysql_query(SELECT value FROM data WHERE id = (select max(id) FROM data WHERE channel_id LIKE '14')); ... Diese Anfrage dauert ca. 6-7 Sekunden. Hat jemand eine Idee wie man dieses beschleunigen kann? Der subquery macht einen table-scan über die komplette data-Tabelle, was dauert natürlich entsprechend lange. So ist es kein Problem (wenn auch nicht schön): SELECT value FROM data WHERE channel_id=14 AND timestamp=(select max(timestamp) FROM data WHERE channel_id=14); Allerdings sollte man nicht ohne Grund direkt auf der DB arbeiten. Das Vorgehen wie von Andreas Götz ist auch deutlich einfacher (Abfrage mit from=now).
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
On Mon, 16 Sep 2013 14:01:31 +0200 Jakob Hirsch j...@plonk.de wrote: Sven peitz, 2013-09-14 11:07: $result1=mysql_query(SELECT value FROM data WHERE id = (select max(id) FROM data WHERE channel_id LIKE '14')); ... Diese Anfrage dauert ca. 6-7 Sekunden. Hat jemand eine Idee wie man dieses beschleunigen kann? Der subquery macht einen table-scan über die komplette data-Tabelle, was dauert natürlich entsprechend lange. achso, es gibt keinen index auf `id`... den scan macht dann aber die haupt-query, nich die subquery. So ist es kein Problem (wenn auch nicht schön): SELECT value FROM data WHERE channel_id=14 AND timestamp=(select max(timestamp) FROM data WHERE channel_id=14); wie schon gesagt, man wuerde doch eleganter schreiben: select value from data where channel_id=14 order by timestamp desc limit 1; Allerdings sollte man nicht ohne Grund direkt auf der DB arbeiten. Das Vorgehen wie von Andreas Götz ist auch deutlich einfacher (Abfrage mit from=now). from=now... funktioniert doch aber wie gehabt nur bei erfassung absoluter staende. ansonsten war die methode doch from=x seconds ago...? also so, dass im im angegebenen zeitraum (mit now = nur aktuelle sekunde) genug werte erfasst sind, damit der interpreter in der middleware daraus etwas berechnen kann. also bei s0-zaehlern mindestens zwei impulse, etc... oder wurde da middleware-seitig was geandert? - Thorben
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Hallo Thorben, 2013/9/16 Thorben Thuermer r...@constancy.org On Mon, 16 Sep 2013 14:01:31 +0200 Jakob Hirsch j...@plonk.de wrote: Sven peitz, 2013-09-14 11:07: $result1=mysql_query(SELECT value FROM data WHERE id = (select max(id) FROM data WHERE channel_id LIKE '14'));... Allerdings sollte man nicht ohne Grund direkt auf der DB arbeiten. Das Vorgehen wie von Andreas Götz ist auch deutlich einfacher (Abfrage mit from=now). from=now... funktioniert doch aber wie gehabt nur bei erfassung absoluter staende. ansonsten war die methode doch from=x seconds ago...? also so, dass im im angegebenen zeitraum (mit now = nur aktuelle sekunde) genug werte erfasst sind, damit der interpreter in der middleware daraus etwas berechnen kann. also bei s0-zaehlern mindestens zwei impulse, etc... oder wurde da middleware-seitig was geandert? - Thorben Das sollte funktionieren da die MW (schon immer?) mittels zweier SQL-Queries den jeweils letzten und nächsten Datenpunkt außer des angefragten Zeitraumes ermitteln und from... to... entsprechend erweitern. Für now() gäbe es also immer den aktuellen und letzten Timestamp und damit die Möglichkeit einen aktuellen Periodenverbrauch zu berechnen. vg Andreas
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Hi, Am 16.09.2013 um 20:45 schrieb Andreas Goetz: Du hast Recht. Was ich geschrieben habe stimmt zwar, allerdings ist der Code noch nicht im Repository angekommen, sondern steht noch in meinem Pull Request: https://github.com/volkszaehler/volkszaehler.org/pull/47 sodele - ist nun drin. Sorry für die Verzögerung - Beta-Tester wären praktisch *hint* Anders formuliert: bitte testen und beschweren, wenn etwas kaputt ist. @Andreas: fettes Merci für's Patchen!!! Gruss, J.
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Servus, Am 16. September 2013 20:53 schrieb Justin Otherguy jus...@justinotherguy.org: sodele - ist nun drin. Sorry für die Verzögerung - Beta-Tester wären praktisch *hint* Anders formuliert: bitte testen und beschweren, wenn etwas kaputt ist. Für das wären Unit-Tests und ein CI-Server gedacht ^^ - travis-ci.org Zumindestens für die großteil einer Applikation. bg
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Hallo, leider kann ich derzeit nicht weiter testen, weil mein Provider den Zugriff wegen zu hoher SQL Last gesperrt hat. ;-( [X] MySQL-Last (Wartezeit auf Festplattenzugriff) [X] MySQL-Last lesend (SELECT-Statements) [X] Kontinuierlich hohe Last Also sind die 6 Sekunden verursacht durch Auslastung des Servers. Dem Vorschlag kann ich jetzt nicht folgen. SQL ist nicht mein täglich Brot ;-) Select value where channel order by id desc limit 1 Aber den Vorschlag über die Middleware zu gehen würde ich gerne aufgreifen wenn ich wüsste wie. Eigentlich brauche ich ja nur den zuletzt in der Datenbank eingetragenen Wert zur ID. Ich muss jetzt aber erst mal warten bis der Zugriff wieder frei ist. Gruß Sven Am 14.09.2013 11:40, schrieb Thorben Thuermer: On Sat, 14 Sep 2013 11:07:20 +0200 Sven peitz sven.pe...@gmx.net wrote: für mein neues Verbrauchs oder Vergleichsanzeige Projekt der aktuellen PV Einspeisung und Bezug vom EVU frage ich in einem PHP script die Volkszähler Datenbank ab. [...] $result1=mysql_query(SELECT value FROM data WHERE id = (select max(id) FROM data WHERE channel_id LIKE '14')); auch zu beachten, was genau in data.value steht ist vom channel-type abhaengig... diese loesung funktioniert nur, wenn leistungswerte geloggt werden. Diese Anfrage dauert ca. 6-7 Sekunden. Hat jemand eine Idee wie man dieses beschleunigen kann? die anfrage ohne subquery formulieren? (subqueries sind fuer nicht sql-er zwar oft intuitiver, aber meist nicht effizient.) select value where channel order by id desc limit 1 Gruß Sven - Thorben
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Hallo Sven, sowas in der Form sollte helfen: http://host/middleware.php/data/8f20eb60-60df-11e2-81a1-3d3a387429e.json?from=now vg Andreas 2013/9/15 Sven peitz sven.pe...@gmx.net Hallo, leider kann ich derzeit nicht weiter testen, weil mein Provider den Zugriff wegen zu hoher SQL Last gesperrt hat. ;-( [X] MySQL-Last (Wartezeit auf Festplattenzugriff) [X] MySQL-Last lesend (SELECT-Statements) [X] Kontinuierlich hohe Last Also sind die 6 Sekunden verursacht durch Auslastung des Servers. Dem Vorschlag kann ich jetzt nicht folgen. SQL ist nicht mein täglich Brot ;-) Select value where channel order by id desc limit 1 Aber den Vorschlag über die Middleware zu gehen würde ich gerne aufgreifen wenn ich wüsste wie. Eigentlich brauche ich ja nur den zuletzt in der Datenbank eingetragenen Wert zur ID. Ich muss jetzt aber erst mal warten bis der Zugriff wieder frei ist. Gruß Sven Am 14.09.2013 11:40, schrieb Thorben Thuermer: On Sat, 14 Sep 2013 11:07:20 +0200 Sven peitz sven.pe...@gmx.net sven.pe...@gmx.net wrote: für mein neues Verbrauchs oder Vergleichsanzeige Projekt der aktuellen PV Einspeisung und Bezug vom EVU frage ich in einem PHP script die Volkszähler Datenbank ab. [...] $result1=mysql_query(SELECT value FROM data WHERE id = (select max(id) FROM data WHERE channel_id LIKE '14')); auch zu beachten, was genau in data.value steht ist vom channel-type abhaengig... diese loesung funktioniert nur, wenn leistungswerte geloggt werden. Diese Anfrage dauert ca. 6-7 Sekunden. Hat jemand eine Idee wie man dieses beschleunigen kann? die anfrage ohne subquery formulieren? (subqueries sind fuer nicht sql-er zwar oft intuitiver, aber meist nicht effizient.) select value where channel order by id desc limit 1 Gruß Sven - Thorben
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
On Sat, 14 Sep 2013 11:07:20 +0200 Sven peitz sven.pe...@gmx.net wrote: für mein neues Verbrauchs oder Vergleichsanzeige Projekt der aktuellen PV Einspeisung und Bezug vom EVU frage ich in einem PHP script die Volkszähler Datenbank ab. [...] $result1=mysql_query(SELECT value FROM data WHERE id = (select max(id) FROM data WHERE channel_id LIKE '14')); auch zu beachten, was genau in data.value steht ist vom channel-type abhaengig... diese loesung funktioniert nur, wenn leistungswerte geloggt werden. Diese Anfrage dauert ca. 6-7 Sekunden. Hat jemand eine Idee wie man dieses beschleunigen kann? die anfrage ohne subquery formulieren? (subqueries sind fuer nicht sql-er zwar oft intuitiver, aber meist nicht effizient.) select value where channel order by id desc limit 1 Gruß Sven - Thorben
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Auch kann es helfen ein explain vor den SQL-Befehl zu setzen und sich die Analyse anzusehen - da sieht man recht schnell ob Teile ohne Index ablaufen, was meist in langsamen Abfragen endet. -- Mit freundlichen Grüßen || Sincerely yours Florian Knodt ·· Im Teich 11 ·· 56648 Saffig www.adlerweb.info · www.56648.de · @adlerweb
Re: [vz-dev] SQL Abfrage aktueller Verbrauch sehr langsam
Ich hatte ähnliche Probleme- Grund dabei war allerdings 1s Connect Time für MySQL. Warum gehst Du für die Abfragen eigentlich nicht über die Middleware? Dann klappts auch für alle Sensortypen! vg Andreas 2013/9/14 Florian Knodt f.kn...@yotaweb.de Auch kann es helfen ein explain vor den SQL-Befehl zu setzen und sich die Analyse anzusehen - da sieht man recht schnell ob Teile ohne Index ablaufen, was meist in langsamen Abfragen endet. -- Mit freundlichen Grüßen || Sincerely yours Florian Knodt ·· Im Teich 11 ·· 56648 Saffig www.adlerweb.info · www.56648.de · @adlerweb