Re: [vz-dev] s0vz: Überflüssige Updates bei jedem Insert?
Hallo Heiko, 2014/1/12 Heiko Baumann h...@gmx.de Hm. Ich hab vorhin mit git pull meinen vz geupdatet: pi@BauratPi /var/www/volkszaehler.org $ sudo git pull remote: Counting objects: 73, done. remote: Compressing objects: 100% (70/70), done. remote: Total 73 (delta 29), reused 34 (delta 3) Unpacking objects: 100% (73/73), done. From git://github.com/volkszaehler/volkszaehler.org ec0c82d..ba113f6 master - origin/master Updating ec0c82d..ba113f6 Fast-forward .../Interpreter/CounterInterpreter.php | 27 ++ lib/Volkszaehler/Interpreter/MeterInterpreter.php |3 +- .../Interpreter/SQL/MySQLAggregateOptimizer.php| 90 +++- lib/Volkszaehler/Interpreter/SQL/SQLOptimizer.php |3 +- lib/Volkszaehler/Interpreter/SensorInterpreter.php |3 +- lib/Volkszaehler/Model/Property.php| 13 ++- lib/Volkszaehler/View/CSV.php | 52 +++ lib/Volkszaehler/View/JSON.php | 32 ++- lib/Volkszaehler/View/JpGraph.php |8 +- lib/Volkszaehler/View/XML.php | 80 ++--- misc/tools/vzclient| 16 ++-- test/Tests/DataCounterTest.php |2 +- test/Tests/DataMeterTest.php |2 +- 13 files changed, 135 insertions(+), 196 deletions(-) - damit sollten doch alle updates drin sein, oder? Ja- Commit 8ac2c5039273b590aec2a9890f87400c08b949a8 liegt dazwischen. Im mysql-log gehts aber nach wie vor extrem wüst zu: 17345 Connect vz@localhost on volkszaehler 17345 Query SELECT e0_.id AS id0, e0_.uuid AS uuid1, e0_.type AS type2, p1_.id AS id3, p1_.pkey AS pkey4, p1_.value AS value5, e0_.class AS class6, p1_.entity_id AS entity_id7 FROM entities e0_ LEFT JOIN properties p1_ ON e0_.id = p1_.entity_id WHERE (e0_.uuid = 'ae9d1b00-f2f5-11e2-8a1f-0dad1c039958') AND e0_.class IN ('channel', 'aggregator') ORDER BY p1_.pkey ASC 140112 22:33:47 17345 Query START TRANSACTION 17345 Query INSERT INTO data (timestamp, value, channel_id) VALUES ('1389562426842', '1', 16) 17345 Query UPDATE properties SET value = '1' WHERE id = 83 17345 Query UPDATE properties SET value = '1' WHERE id = 81 17345 Query UPDATE properties SET value = '360' WHERE id = 79 17345 Query commit 17345 Quit Insofern also alles beim alten. Wie krieg ich die neueste Version? Ich kann's nicht mehr nachvollziehen: SELECT e0_.id AS id0, e0_.uuid AS uuid1, e0_.type AS type2, p1_.id AS id3, p1_.pkey AS pkey4, p1_.value AS value5, e0_.class AS class6, p1_.entity_id AS entity_id7 FROM entities e0_ LEFT JOIN properties p1_ ON e0_.id = p1_.entity_id WHERE (e0_.uuid = ?) AND e0_.class IN ('channel', 'aggregator') ORDER BY p1_.pkey ASC START TRANSACTION INSERT INTO data (timestamp, value, channel_id) VALUES (?, ?, ?) COMMIT Bist Du sicher dass der Code den Du siehst auch wirklich der ist der ausgeführt wird? vg Andreas
[vz-dev] s0vz: Überflüssige Updates bei jedem Insert?
Hallo zusammen, beim Installieren der neuen aggregate-Tabelle von Andi bin ich mehr oder weniger zufällig beim Betrachten der mysql-logs darauf gestoßen, dass jedes s0-Event neben dem eigentlichen Insert offenbar immer auch einen join und drei Updates ausführt: 911 Query SELECT e0_.id AS id0, e0_.uuid AS uuid1, e0_.type AS type2, p1_.id AS id3, p1_.pkey AS pkey4, p1_.value AS value5, e0_.class AS class6, p1_.entity_id AS entity_id7 FROM entities e0_ LEFT JOIN properties p1_ ON e0_.id = p1_.entity_id WHERE (e0_.uuid = '90da22c0-f2dc-11e2-a59d-e9b55d71b128') AND e0_.class IN ('channel', 'aggregator') ORDER BY p1_.pkey ASC 911 Query START TRANSACTION 911 Query INSERT INTO data (timestamp, value, channel_id) VALUES ('1389302896063', '1', 14) 911 Query UPDATE properties SET value = '1' WHERE id = 71 911 Query UPDATE properties SET value = '1' WHERE id = 69 911 Query UPDATE properties SET value = '1000' WHERE id = 67 911 Query commit Das ist offenbar ein s0-Eintrag (value=1 im channel 14, Stromzähler). Was mich wundert: warum muss der aufwändige join vorher ausgeführt werden? Liefert bei mir z.B. +-+--+---+--++-+-++ | id0 | uuid1| type2 | id3 | pkey4 | value5 | class6 | entity_id7 | +-+--+---+--++-+-++ | 14 | 90da22c0-f2dc-11e2-a59d-e9b55d71b128 | power | 71 | active | 1 | channel | 14 | | 14 | 90da22c0-f2dc-11e2-a59d-e9b55d71b128 | power | 70 | color | navy| channel | 14 | | 14 | 90da22c0-f2dc-11e2-a59d-e9b55d71b128 | power | 69 | public | 1 | channel | 14 | | 14 | 90da22c0-f2dc-11e2-a59d-e9b55d71b128 | power | 67 | resolution | 1000| channel | 14 | | 14 | 90da22c0-f2dc-11e2-a59d-e9b55d71b128 | power | 72 | style | steps | channel | 14 | | 14 | 90da22c0-f2dc-11e2-a59d-e9b55d71b128 | power | 68 | title | Strom-Ferienwohnung | channel | 14 | +-+--+---+--++-+-++ 6 rows in set (0.00 sec) Muss das wirklich vor jedem Insert sein? Andi hat sich im Originalthread ja schon dazu geäußert: Den Join braucht Doctrine, das scheint auch mit Query Cache nicht weg optimierbar zu sein da es immer einen aktuellen Stand aus der DB haben will, die Abfrage ist auch schnell. Ok, soll mir recht sein. Aber danach werden _immer_ die Werte für resolution, active und public geupdatet (Unnötig, sind die alten Werte) - das sind drei sinnlose Updates pro s0-insert. Da die s0-Stromzähler ja mitunter heftig feuern (Wärmepumpe unter Last 4kWh, PV-Wechselsrichter gern auch mal 12kWh, zudem zwei Geschoss-Stromzähler), könnt ich mir vorstellen, dass das ziemlich viel unnötige Queries auslöst. Da kommt insgesamt schon einiges zusammen - und wenn zu jedem Insert eines neuen Werts drei überflüssige Updates kommen, ist mir klar, warum meine kleine Kiste etwas schwächelt... Frage deswegen: Ist die Problematik bekannt? Kann das optimiert werden? Vielen Dank und schöne Grüße! Heiko
Re: [vz-dev] s0vz: Überflüssige Updates bei jedem Insert?
Hi Heiko, das hat aber nichts mit *S0VZ* zu tun, der Deamon macht keine Datenbankzugriffe ... Am 12. Januar 2014 21:53 schrieb Heiko Baumann h...@gmx.de: beim Installieren der neuen aggregate-Tabelle von Andi bin ich mehr oder weniger zufällig beim Betrachten der mysql-logs darauf gestoßen, dass jedes s0-Event neben dem eigentlichen Insert offenbar immer auch einen join und drei Updates ausführt:schnell. -- Grü|3e H3nr!k https://github.com/w3llschmidt
Re: [vz-dev] s0vz: Überflüssige Updates bei jedem Insert?
...und ist auch schon behoben?! Viele Grüße, Andreas Am 12.01.2014 um 22:15 schrieb W3ll Schmidt w3llschm...@gmail.com: Hi Heiko, das hat aber nichts mit S0VZ zu tun, der Deamon macht keine Datenbankzugriffe ... Am 12. Januar 2014 21:53 schrieb Heiko Baumann h...@gmx.de: beim Installieren der neuen aggregate-Tabelle von Andi bin ich mehr oder weniger zufällig beim Betrachten der mysql-logs darauf gestoßen, dass jedes s0-Event neben dem eigentlichen Insert offenbar immer auch einen join und drei Updates ausführt:schnell. -- Grü|3e H3nr!k https://github.com/w3llschmidt
Re: [vz-dev] s0vz: Überflüssige Updates bei jedem Insert?
Hm. Ich hab vorhin mit git pull meinen vz geupdatet: pi@BauratPi /var/www/volkszaehler.org $ sudo git pull remote: Counting objects: 73, done. remote: Compressing objects: 100% (70/70), done. remote: Total 73 (delta 29), reused 34 (delta 3) Unpacking objects: 100% (73/73), done. From git://github.com/volkszaehler/volkszaehler.org ec0c82d..ba113f6 master - origin/master Updating ec0c82d..ba113f6 Fast-forward .../Interpreter/CounterInterpreter.php | 27 ++ lib/Volkszaehler/Interpreter/MeterInterpreter.php |3 +- .../Interpreter/SQL/MySQLAggregateOptimizer.php| 90 +++- lib/Volkszaehler/Interpreter/SQL/SQLOptimizer.php |3 +- lib/Volkszaehler/Interpreter/SensorInterpreter.php |3 +- lib/Volkszaehler/Model/Property.php| 13 ++- lib/Volkszaehler/View/CSV.php | 52 +++ lib/Volkszaehler/View/JSON.php | 32 ++- lib/Volkszaehler/View/JpGraph.php |8 +- lib/Volkszaehler/View/XML.php | 80 ++--- misc/tools/vzclient| 16 ++-- test/Tests/DataCounterTest.php |2 +- test/Tests/DataMeterTest.php |2 +- 13 files changed, 135 insertions(+), 196 deletions(-) - damit sollten doch alle updates drin sein, oder? Im mysql-log gehts aber nach wie vor extrem wüst zu: 17345 Connect vz@localhost on volkszaehler 17345 Query SELECT e0_.id AS id0, e0_.uuid AS uuid1, e0_.type AS type2, p1_.id AS id3, p1_.pkey AS pkey4, p1_.value AS value5, e0_.class AS class6, p1_.entity_id AS entity_id7 FROM entities e0_ LEFT JOIN properties p1_ ON e0_.id = p1_.entity_id WHERE (e0_.uuid = 'ae9d1b00-f2f5-11e2-8a1f-0dad1c039958') AND e0_.class IN ('channel', 'aggregator') ORDER BY p1_.pkey ASC 140112 22:33:47 17345 Query START TRANSACTION 17345 Query INSERT INTO data (timestamp, value, channel_id) VALUES ('1389562426842', '1', 16) 17345 Query UPDATE properties SET value = '1' WHERE id = 83 17345 Query UPDATE properties SET value = '1' WHERE id = 81 17345 Query UPDATE properties SET value = '360' WHERE id = 79 17345 Query commit 17345 Quit Insofern also alles beim alten. Wie krieg ich die neueste Version? Danke und gute Nacht :) Heiko Am 12.01.2014 22:25, schrieb Andreas Götz: ...und ist auch schon behoben?! Am 12.01.2014 um 22:15 schrieb W3ll Schmidt w3llschm...@gmail.com mailto:w3llschm...@gmail.com: Hi Heiko, das hat aber nichts mit *S0VZ* zu tun, der Deamon macht keine Datenbankzugriffe ...