dsmrreader/dsmr-reader

Database groeit gestaag

zuidwijk opened this issue ยท 12 comments

Ik snap de melding, maar kan in de instellingen nergens vinden om dit aan te passen.
CB341A22-06E1-45F9-9F48-A4EF95287C74

Any tips?

onder Configuratie -> Retentieconfiguratie wijzigen ?

Dat heb ik dus aangezet (stond uit). Het is van dit:
voor
Naar dit gegaan:
na

Dit staat nu ingesteld:
instelling

@zuidwijk bedankt voor je melding en Helloitsme voor de hulp.

Ik denk dat je het beste even dit issue kunt doorlezen vanaf hier: #1149 (comment)

Verder is het aan te raden om de datalogger sleep op minimaal 5 seconden te zetten. Ik kan niet uit je verhaal opmaken wat daar de waarde van is, maar het is meestal de oorzaak van grote datasets. Je kunt op de About-pagina een debuginfo-dump maken om te zien waar dat op staat. Het opschonen van data heeft namelijk weinig effect als er net zo hard weer data bij komt.

Zie verder het gelinkte issue ook voor een vacuumdb na een tijdje opschonen (het geeft weer wat schijfruimte terug). Afhankelijk van je hardware kan het opschonen van je ~22+ miljoen metingen even duren (lees: enkele dagen).
Dus ik kan je aanraden om vooral even 1x per dag die queries van het andere issue uit te voeren voor de voortgang. Het opschonen zal in het begin langzaam gaan en later steeds sneller.

Mocht het aantal metingen per minuut je trouwens niet zoveel uitmaken, dan kun je de datalogger sleep zelfs op 9 a 10 seconden zetten, voor een nog betere performance/dataopslag. Voor uur/dagverbruik is het namelijk meer dan nauwkeurig genoeg.

Lagere sleeps hebben vooral nut voor het vaker triggeren van bijvoorbeeld eventuele MQTT-koppelingen. Je bent er uiteraard helemaal vrij in.

@dennissiemensma zal er morgen naar kijken. Hardware en storage is geen issue. Het draait in docker op een i3 / 32GB ram server met voldoende opslag. Is meer dat ik niet van rode meldingen en waarschuwingen hou ๐Ÿ˜„

Alles wat ik kan verbeteren is mooi meegenomen.

M'n sleep proces staat nu op 0,5. Ik log dus elke telegram elke seconde.

Bedankt voor de aanvulling. In jouw geval is het prima om eventueel ruwe data te bewaren, maar als je het zelf ook niet gebruikt zou ik het inderdaad gewoon laten opschonen. Op jouw hardware zal het wel even duren voordat je echt performance issues krijgt, maar een kleinere database is sowieso sneller en ook makkelijker te beheren qua backups.

Mocht de melding niet weg gaan of iets, laat maar weten. De alerts staan in de huidige versie op 1 GB en 20 miljoen metingen.

Melding mag wat mij betreft inderdaad gesloten worden/blijven.

Wel heb ik nog een klein vraagje naar wat nu de beste instelling is/zijn voor een Raspberry Pi met een SD kaartje.
Om de hoeveel tijd wil je bijvoorbeeld loggen? Neem aan niet elke seconde elke telegram, maar bijvoorbeeld om de 10, 30 of 60 seconde? Ik vraag dit omdat ik heel veel vraag krijg naar een goede logger en in mijn ogen is dat by far jouw dsmr-reader @dennissiemensma. Alleen niet iedereen heeft een server, of wil een server. Een Raspberry Pi is dan een perfecte oplossing, maar wil niet dat de SD kaart binnen enkele maanden al kapot gaat door de hoge writes.

Ik zit even te spelen met de vacuumdb enzo, maar ik draai het in een container van/via @xirixiz.

$ docker exec -it dsmrdb bash
bash-4.4# su - postgres
5e9396a77d7f:~$ vacuumdb -f -v -d dsmrreader
vacuumdb: could not connect to database dsmrreader: FATAL:  role "postgres" does not exist
5e9396a77d7f:~$ exit
bash-4.4# exit
$ docker exec -it dsmr bash
bash-5.0# su - dsmr
su: unknown user dsmr
bash-5.0# pwd
/
bash-5.0# ls
bin          dsmr         home         media        opt          release.txt  run          sbin         sys          usr
dev          etc          lib          mnt          proc         root         run.sh       srv          tmp          var
bash-5.0# cd dsmr/
bash-5.0# ls
CHANGELOG                backups                  dsmr_backend             dsmr_frontend            dsmr_parser              dsmrreader               pylama.ini
FUNDING.yml              check_python_version.py  dsmr_backup              dsmr_influxdb            dsmr_plugins             logs                     reload.sh
LICENCE                  deploy.sh                dsmr_consumption         dsmr_mindergas           dsmr_pvoutput            manage.py                setup.cfg
README.md                docs                     dsmr_datalogger          dsmr_mqtt                dsmr_stats               post-deploy.sh           tools
RELEASE                  dsmr_api                 dsmr_dropbox             dsmr_notification        dsmr_weather             pre-deploy.sh
bash-5.0# ./manage.py dsmr_debuginfo

<--- COPY OUTPUT AFTER THIS LINE AND PASTE IN YOUR GITHUB ISSUE --->


```

OS
    Python version                                                                                                    v3.8.5
    Platform                                                                                                  Linux (x86_64)
    System                                                                              Linux-4.15.0-121-generic-x86_64-with

DSMR-READER
    Version                                                                                                             v4.5
    Backend sleep                                                                                                      1.0 s
    Datalogger sleep                                                                                                   0.5 s
    Retention cleans up after                                                                                          672 h
    Telegram parser                                                                                                      "4"
    Database engine/vendor                                                                                        postgresql

DATA
    Telegrams                                                                                                               
      - total (est.)                                                                                                 2267210
      - version (latest reading)                                                                                        "50"
    Consumption records                                                                                                     
      - electricity (est.)                                                                                             50848
      - gas (est.)                                                                                                     20762

ISSUES
    Database growing large: 5346 MB, consider data cleanup (if not already enabled)   Since 2020-11-01 10:25:12.942419+01:00

POSTGRESQL SIZE OF LARGEST TABLES (> 5 MB)
    public.dsmr_datalogger_dsmrreading                                                                               5177 MB
    public.dsmr_consumption_electricityconsumption                                                                    148 MB
    public.dsmr_consumption_gasconsumption                                                                           7856 kB

```

<--- COPY OUTPUT UNTIL THIS LINE AND PASTE IN YOUR GITHUB ISSUE --->

bash-5.0# 

Dit dus:


OS
    Python version                                                                                                    v3.8.5
    Platform                                                                                                  Linux (x86_64)
    System                                                                              Linux-4.15.0-121-generic-x86_64-with

DSMR-READER
    Version                                                                                                             v4.5
    Backend sleep                                                                                                      1.0 s
    Datalogger sleep                                                                                                   0.5 s
    Retention cleans up after                                                                                          672 h
    Telegram parser                                                                                                      "4"
    Database engine/vendor                                                                                        postgresql

DATA
    Telegrams                                                                                                               
      - total (est.)                                                                                                 2267210
      - version (latest reading)                                                                                        "50"
    Consumption records                                                                                                     
      - electricity (est.)                                                                                             50848
      - gas (est.)                                                                                                     20762

ISSUES
    Database growing large: 5346 MB, consider data cleanup (if not already enabled)   Since 2020-11-01 10:25:12.942419+01:00

POSTGRESQL SIZE OF LARGEST TABLES (> 5 MB)
    public.dsmr_datalogger_dsmrreading                                                                               5177 MB
    public.dsmr_consumption_electricityconsumption                                                                    148 MB
    public.dsmr_consumption_gasconsumption                                                                           7856 kB

Nou zegt de postgres vacuumdb melding dat de role postgres niet bestaat, de database draait onder de naam dsmrreader. Dus geef ik dat als user op:

bash-4.4# vacuumdb -f -v -d dsmrreader -U dsmrreader
vacuumdb: vacuuming database "dsmrreader"
INFO:  vacuuming "public.dsmr_backend_backendsettings"
INFO:  "dsmr_backend_backendsettings": found 0 removable, 1 nonremovable row versions in 1 pages
DETAIL:  0 dead row versions cannot be removed yet.
...

<...veel output...>

...
CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s.
INFO:  vacuuming "public.dsmr_mqtt_mqttbrokersettings"
INFO:  "dsmr_mqtt_mqttbrokersettings": found 0 removable, 1 nonremovable row versions in 1 pages
DETAIL:  0 dead row versions cannot be removed yet.
CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s.
bash-4.4#
bash-4.4# exit
exit
$ docker exec -it dsmr bash
bash-5.0# /dsmr/manage.py dsmr_debuginfo

<--- COPY OUTPUT AFTER THIS LINE AND PASTE IN YOUR GITHUB ISSUE --->


```

OS
    Python version                                                                                                    v3.8.5
    Platform                                                                                                  Linux (x86_64)
    System                                                                              Linux-4.15.0-121-generic-x86_64-with

DSMR-READER
    Version                                                                                                             v4.5
    Backend sleep                                                                                                      1.0 s
    Datalogger sleep                                                                                                   0.5 s
    Retention cleans up after                                                                                          672 h
    Telegram parser                                                                                                      "4"
    Database engine/vendor                                                                                        postgresql

DATA
    Telegrams                                                                                                               
      - total (est.)                                                                                                 2250790
      - version (latest reading)                                                                                        "50"
    Consumption records                                                                                                     
      - electricity (est.)                                                                                             50928
      - gas (est.)                                                                                                     19533

POSTGRESQL SIZE OF LARGEST TABLES (> 5 MB)
    public.dsmr_datalogger_dsmrreading                                                                                416 MB
    public.dsmr_consumption_electricityconsumption                                                                     17 MB

```

<--- COPY OUTPUT UNTIL THIS LINE AND PASTE IN YOUR GITHUB ISSUE --->

bash-5.0# 

Veel debug en trial/error... maar zo te zien is het goed opgeschoond (en dat ging binnen enkele secondes :-) )


OS
    Python version                                                                                                    v3.8.5
    Platform                                                                                                  Linux (x86_64)
    System                                                                              Linux-4.15.0-121-generic-x86_64-with

DSMR-READER
    Version                                                                                                             v4.5
    Backend sleep                                                                                                      1.0 s
    Datalogger sleep                                                                                                   0.5 s
    Retention cleans up after                                                                                          672 h
    Telegram parser                                                                                                      "4"
    Database engine/vendor                                                                                        postgresql

DATA
    Telegrams                                                                                                               
      - total (est.)                                                                                                 2250790
      - version (latest reading)                                                                                        "50"
    Consumption records                                                                                                     
      - electricity (est.)                                                                                             50928
      - gas (est.)                                                                                                     19533

POSTGRESQL SIZE OF LARGEST TABLES (> 5 MB)
    public.dsmr_datalogger_dsmrreading                                                                                416 MB
    public.dsmr_consumption_electricityconsumption                                                                     17 MB

(vond dit wel een mooie toevoeging om in de toekomst terug naar te refereren :) )

Hmm, misschien is er een oplossing voor die ik kan opnemen. Je kan het ook als volgt uitvoeren:

docker exec -ti <container-name> bash -c 'PGPASSWORD=${DB_PASS} /usr/bin/vacuumdb -f -v -h ${DB_HOST} -d ${DB_NAME} -U ${DB_USER}'

...added to the readme for Docker environments

Goedemorgen, ik heb de documentatie aangepast en een nieuwe release uitgebracht zodat er een cleanup script in de docker image zit. De variabele voor DB_PORT is ook opgenomen en daarnaast zit er een check in of de backend een postgresql omgeving betreft.

Opschoning kan nu als volgt gestart worden:

docker exec -ti dsmr bash -c '/app/cleandb.sh'

Of verbose

docker exec -ti dsmr bash -c '/app/cleandb.sh -v'