Re: [vz-dev] s0vz: Überflüssige Updates bei jedem Insert?

2014-01-13 Diskussionsfäden Andreas Goetz
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?

2014-01-12 Diskussionsfäden Heiko Baumann

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?

2014-01-12 Diskussionsfäden W3ll Schmidt
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?

2014-01-12 Diskussionsfäden Andreas Götz
...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?

2014-01-12 Diskussionsfäden Heiko Baumann

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 ...