-
Notifications
You must be signed in to change notification settings - Fork 94
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
Source data retention #72
Comments
I thought of another solution. There is not need to dispose of all the source readings, as we could just wipe 99% of them in each hour. The absolute minimum for hourly stats is ofcourse at least one reading per hour. If we would keep at least one reading of each hour passed, we could recalculate all statistics retroactive, if one needed to do so. As there are around 350+ readings in each hour, the data would be 350 times smaller. This should speedup backups, restores and migrations greatly. And reduce the disk space required. The only downside is that the disk space freed might be reused (randomly) for new readings, possibly reducing the lifetime of the SD card. However, this would also be the situation when wiping all readings anyway. |
Update of my internal stats of disk used so far:
Compared to March this year:
As I'm almost reaching the three million milestone DSMR-reading count: |
I've looked into this for some hours now, but it's quite complex to implement semi-retention for discarding data, while still keeping 1 data point per hour. I'll won't have this delay the 1.4 release, so next try in v1.5. |
Note to self to also update the docs, as I refer to this feature multiple times. |
Since Django's new
This is so nice as it allows me to retroactively iterate through any data requiring retention. And I can limit that as well to prevent any hanging background processes. |
Committed an initial setup in 5469794. To be continued. |
Eerste opzet is klaar. Het werkt goed voor PostgreSQL. Helaas nog niet voor MySQL, dus daar mag ik nog een blik op werpen. |
Bij nader inzien werkt het wel voor MySQL, maar alleen wanneer de tijdzones geactiveerd zijn in de database. |
Dit zou afdoende moeten zijn voor degenen die nog MySQL gebruiken: |
Branch gemerged naar |
Uitgerold. De performance is nog niet super, maar ik kan daar weinig aan veranderen. Wellicht dat ik het doorvoeren van retentie laat toepassen voor bepaalde periodes nachts, zodat andere processen er ook geen last van hebben.
Hij heeft nu op een Pi 3 ongeveer een minuut nodig per dag opschoning. En dat is nog maar voor een relatief kleine database. |
Voor nu zal ik hem bij mijzelf aan laten staan, zodat ik kan zien hoelang het duurt om een jaar aan gegevens op te schonen. Ter referentie mijn huidige database:
|
Ik heb nu een hardcoded restrictie toegevoegd dat retentie alleen tussen 0:00 en 6:00 uitgevoerd wordt (wanneer ingeschakeld). Wellicht dat ik het later nog instelbaar maak, maar het heeft weinig zin retentie overdag door te voeren, gezien het veel resources kost (in het begin). Vanmiddag heeft mijn eigen Pi zo'n 6 uur lang retentie kunnen doorvoeren. Van de Gezien PostgreSQL zelf niet altijd loze ruimte vrijgeeft, doe ik nu handmatig een
Met als concreet resultaat: Vanochtend
Nu
|
Aankomende nacht heeft die dus opnieuw 6 uur de tijd om het restant op te schonen. Waarschijnlijk is die daarna helemaal bij. Morgen opnieuw kijken. |
Vannacht is het restant opgeschoond. Er zijn, van de eerdere 6 miljoen metingen, nu nog maar een kleine 300.000 over. Een vacuumdb schoont de laatste ruimte op en geeft onderstaande resultaten. Disk usage was:
Nu:
Dat betreft dus 2 jaar aan metingen, sinds december 2015, waarbij de rententie momenteel op max één maand staat. De database-backup is nu ook lekker klein en vooral snel. Bij gebruikers met een DSMRv5-meter zullen de verschillen vanzelfsprekend nóg groter zijn. |
Ik zal nog een howto voor |
Zojuist uitgebracht in release v1.12. |
Vraagje mbt regenereren van statistieken: je gaf aan dat zolang men externe backups toepast de statistieken altijd beschikbaar blijven, maar, je kunt backups niet stapelen bij het restoren. Hoe gaat dit dan in zn werk? |
Ik doel daarbij op de dag- en uurstatistieken-tabellen die nooit opgeschoond zullen worden. Zolang je goede database backup's hebt, zul je die altijd kunnen restoren, ongeacht tot hoever de bron-metingen opgeschoond zijn. Een alternatief is geen retentie inschakelen en het handmatig beperken van de doorvoer aan metingen. Zie daarvoor #413. Alleen zal dat niet voor iedereen een werkbare/wenselijke situatie zijn. |
Ik heb de retentie op één maand gezet. Vannacht tussen 1 en 7 (dus niet tussen 0 en 6!) heeft deze duidelijk gedraaid want de PVO output was bijna non-existent. Raadt je aan om pas nadat het opruimen klaar is te vacuum-en? En moeten we dan een vacuum FULL ANALYZE doen? |
Ik zou persoonlijk de vacuum pas doen wanneer hij helemaal klaar is. Het is namelijk een proces dat volgens mij de complete database vergrendelt en bij mij had die snel 5 a 10 minuten nodig, laat staan bij een grote database zoals die van jou. Je kunt overigens in de logs van de backend vrij makkelijk zien waar die is gebleven én hoelang het duurt om één dag op te schonen (bij mij iets meer dan een minuut). Als je zoekt op
Tot slot, qua type vacuum, ik heb tot nu toe gewoon een FULL gedaan ( |
Naar mijn mening is de beschrijving van deze feature in de docs niet helemaal correct. Je schrijft over het "inschakelen van retentie" terwijl de default ('rententie uit') juist alle gegevens bewaart. Deze beschrijving is eigenlijk verkeerd om. |
Doet overigens niks af aan de functie zelf, dit is een zeer nuttige toevoeging! |
Bedankt voor je input. Ik heb het vooral beschreven vanuit het technisch oogpunt, echter klopt het dat het op meerdere manieren gelezen kan worden. Daarom heb ik het nu iets aangepast en mogelijk mag ik het nog verder herschrijven een volgende keer. |
Maybe a rename of the feature can solve this.. Retention Reduction or
something.
…On Jan 19, 2018 09:58, "Dennis Siemensma" ***@***.***> wrote:
Bedankt voor je input. Ik heb het vooral beschreven vanuit het technisch
oogpunt, echter klopt het dat het op meerdere manieren gelezen kan worden.
Daarom heb ik het nu iets aangepast en mogelijk mag ik het nog verder
herschrijven een volgende keer.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#72 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/ADp5_76Wr7XEPSfz6JXCtmCbTKbf409-ks5tMFk4gaJpZM4Hn6HW>
.
|
This is my current database disk usage after almost three months, containing 700+ K readings:
That averages around 400 MB for each year. It should be possible to delete source readings after:
Retention should be checked once a day or once a week.
The text was updated successfully, but these errors were encountered: