Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Database groeit gestaag #1165

Closed
zuidwijk opened this issue Oct 25, 2020 · 12 comments
Closed

Database groeit gestaag #1165

zuidwijk opened this issue Oct 25, 2020 · 12 comments

Comments

@zuidwijk
Copy link

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

Any tips?

@Helloitsme
Copy link

onder Configuratie -> Retentieconfiguratie wijzigen ?

@zuidwijk
Copy link
Author

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

Dit staat nu ingesteld:
instelling

@dennissiemensma dennissiemensma added this to the Other milestone Oct 26, 2020
@dennissiemensma
Copy link
Member

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

@dennissiemensma
Copy link
Member

dennissiemensma commented Oct 26, 2020

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.

@zuidwijk
Copy link
Author

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

@dennissiemensma
Copy link
Member

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.

@zuidwijk
Copy link
Author

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.

@dennissiemensma
Copy link
Member

dennissiemensma commented Oct 27, 2020 via email

@zuidwijk
Copy link
Author

zuidwijk commented Nov 1, 2020

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

@zuidwijk
Copy link
Author

zuidwijk commented Nov 1, 2020

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

@xirixiz
Copy link
Contributor

xirixiz commented Nov 1, 2020

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

@xirixiz
Copy link
Contributor

xirixiz commented Nov 2, 2020

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'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants