Je viens d’installer Sqlite-web pour voir un peu comment optimiser ma base de données qui est énorme, je viens de m’en rendre compte, là c’est une urgence qu’elle diminue. Je ne parviens pas à le faire fonctionner.
Lorsque je fais ça :
Bonjour à tous
De base j’utilise mariaDB et j’ai constaté que la taille de la base grandissait très vite (15G0 en 5 jours). En regardant avec phpmyadmin j’ai vu que pour de nombreuses lignes, l’état était déclaré comme Unknown.
Pour comprendre ce qui se passe, j’ai installé sqllite web et la base par défaut et j’ai regardé les 20 entités les plus stockées.
En revanche, je n’y connais rien en requête Sql.
Quelqu’un saurait-il m’indiquer la requête pour identifier les entités pour lesquelles la valeur est unknow ?
En vous remerciant par avance
Unknow est un état valable dans HA… Toutes les entités dont l’état n’est pas réçu ou pas calculable est par défaut Unknown.
ça c’est bon pour la base par défaut, pas pour la base Mariadb…
Pourquoi ?!?!? De base, c’est pas indispensable et surtout un choix étonnant si tes connaissances sont limitées.
A mon avis, ça serait plus simple de revenir au sqllite par défaut et de travailler sur la contruction d’un recorder plus adapté et surtout ne pas stocker les entités dont on a pas besoin etc…
J’utilise mariadb pour la stabilité sur un serveur différent pour des sauvegardes séparées.
J’ai remis la base par défaut afin d’utiliser sql lite pour comprendre pourquoi elle augmente autant. J’ai constaté l’augmentation lors du passage de mariadb en add-on à mariadb sous proxmox.
Comme tu le dis, je suis donc revenu au sqllite pour comprendre ce qui ne va pas dans le recorder.
J’ai un peu de connaissances de sql. où peut-on trouver la structure de la base pour faire une requête qui me donne les valeurs des entités ?
En vous remerciant pour votre aide
A mon avis, c’est un gain bien relatif et surtout une grosse source d’ennuis ou d’admin supplémentaires :
tu n’as pas indiqué l’archi de ton montage (ni ton recorder d’ailleurs), mais le mécanisme de base ne souffre pas de souci de stabilité en soi. Et si c’est le cas, c’est plus vraisemblablement un bug temporaire (je n’ai pas souvenir de ce genre d’incident en tout cas).
le backup HA intègre la base de données SQLlite.
les perfs avec une base locale de taille raisonnable valent sans doute celles d’une grosse base sur un serveur à distant
Les requêtes dont tu as besoin sont contenus dans ce sujet (et dans la réponse de @Lesuperlolo ).
Oublie cette notion de ‹ valeur › c’est pas ce qui compte. De toute façon, tu ne peux pas dire que tu veux garder uniquement les valeurs numériques et ne pas tenir compte des unknown.
Tu dois simplement faire le tri (cohérent) entre les entités qui te servent (genre des conso électriques) et celles dont tu ne te sert pas (les heures par ex)… En laissant la durée de rétention 10j tu devrai avoir une base de taille stable et limitée… Ensuite à toi de vérifier que tu as les infos historiques (> 10J) dont tu as besoin également, s’il en manque, il faut corriger les entités pour ajouter les bonnes valeurs ‹ class ›
Quelque soit la base sqllite ou mariadb, là n’est pas le sujet.
Je constate que j’ai des lignes pour lesquels state = ‹ unknown › ou state =‹ unavailable › et d’autres ou le state est rempli avec une valeur.
Je me dis que les lignes unknown et unavailable ne sont pas normales et donc je cherche les entités listées dans le recorder à l’origine de ce problème pour corriger le recorder et ne stocker que des données valables.
Quand je regarde les données dans le recorder, je n’identifie pas de cas où elles sont unknown ou unavailable. D’où ma question.
Si je comprends bien la req^te et le résultat, la requête ci-dessus ne donne pas les entités pour lesquelles la valeur est unknown ou unavailable.
mais l e nombre de ligne par entités
Pas directement, mais un peu quand même : accès /outils différents
Comme dit, plus haut, tu te trompes de piste… L’état n’a pas d’importance et est 100% normal.
Il faut juste le nom des entités pour configurer le recorder, les plus nombreuses sont les premières à supprimer (quelque soit l’état)
Ca a pris un peu de temps, pour tout bien régler, mais désormais, ma BDD tourne autour de 60 Mo pour 7 jours couverts.
Il faut se poser les questions suivantes :
ai-je besoin de telle entité ? Si non, la désactiver (ca, c’est pénible au début, car il faut le faire entité par entité)
ai-je besoin de connaitre l’évolution de telle entité ? Si non, la désactiver dans le recorder
Dans le recorder, tu peux fonctionner selon plusieurs modes :
je retiens tout, sauf…
je ne retiens rien, sauf…
… et ca dépend des « entity glob », en gros, des noms génériques.
Sur mon HA en production, je suis en « je retiens tout … sauf », mais j’ai viré ce dont je suis certain de ne pas avoir besoin autrement qu’en valeur en temps réel. Et j’ai aussi désactivé toute grandeur totalement inutile
Sur mes HA de test ou mes VMs, je suis en « je ne retiens rien, sauf… » … ce que je teste (très facile à mettre mettre en place)
A noter qu’il faudra plusieurs jours pour voir la BDD réduire en taille, et que ca se stabilisera une fois dépassée la période de rétention définie dans le recorder (ou la valeur par défaut : 7 jours ?).
Je reviens sur ce fil car je vois un interrêt de pouvoir definir les périodes et intervalles d’enregistrements de différents sensors dans la base d’historique.
Par exemple, il est bien de pouvoir visualiser sur 1 mois les productions PV journalières, sur 5 ans les productions PV mensuelles, sur 10 ans les productions PV annuelles, etc …
Si je me limite à mettre 10 ans (periodes max qu’il me faut pour mes stats PV annuelles), je vais alors aussi enregistrer des données dont je n’ai pas besoin. (données journalières/mensuelles sur 10 ans!)
Et avec un include de mes quelques sensors, j’exclus automatiquement tout le reste … il y a pleins d’autres sensors qu’il me faut pour 1 semaines (et donc les 10 jours d’enregistrement par défaut) qui sont alors indisponibles à un affichage dans un chart …
Je suis nouveau sur HA (et oui je viens de Jeedom) et pour ce coup si l’historique fonctionne de cette manière sur HA c’est pas top …
Pour le stockage, à la différence de jeedom qui conserve les données en mode bourrin (en plus de faire un mélange valeur/format), sur les 10 premiers jours, les 2 applis conservent les données intactes. Par contre, sous HA le « cout » de stockage au delà de la période des 10j (les stats long terme) ne coutent pas grand chose puisque l’échantillonnage est réduit automatiquement.
Au final, garder pour 10 ans c’est quasi pareil en taille que 5 ou 1 an. Donc faire le tri toi-même n’apporte plus vraiment d’intérêt. En plus, puisque tu as moins de valeurs, les perfs d’affichage sont au RDV, alors que Jeedom souffre.
Ensuite, il faut faire la différence entre l’affichage et le stockage… Là aussi les 2 applis différents :
sous HA, ceux sont les cartes ou les dashboards qui feront le boulot d’afficher la durée de ton choix.
Donc c’est la même donnée qui permet de voir tes PV à la semaine/au mois/à l’année.. Et non 3 jeux de données différents.
Donc la gestion est plus simple :
Tu as besoin des données longtemps => INCLUDE en faisant attention à typer tes données pour les stats long terme.
Tu as besoin des données sur le moment => INCLUDE simplement
Tu as n’a pas besoin de données => rien
Ce qui est important, c’est de bien comprendre que toutes les données que tu mets dans la base et dont tu ne te sert pas, coutent beaucoup sur les 10 premiers jours. Et puisqu’on a facilement des milliers d’entités, la facture en stockage grimpe… C’est là qu’il faut réfléchir à trier.
Merci pour ta réponse @Pulpy-Luke , je suis d’accord avec toi.
Du coup dans mon cas, j’historise avec un INCLUDE ce dont j’ai besoin sur 10 ans avec interval de 10 minutes par exemple et ça devrait le faire … le reste des entités j’en ai pas besoin.
J’ai donc fait ceci:
recorder:
purge_keep_days: 3650 # <-- Conserve 10 ans d'historique
commit_interval: 600 # Enregistre les changements toutes les 10 minutes
include:
entities:
- sensor.production_pv_totale
Et depuis un chart je peux faire des stats jours, mois, années comme ceci :
C’est exactement l’idée.
Petite variante cependant, l’intervalle n’est pas l’intervalle de mesure, mais celui de la fréquence d’enregistrement de la base. La fréquence de mesure est à la minute (en général). Pendant 600 tout est stocké dans un tampon mémoire avant d’être enregistré
Oui, tu te doutes bien que pusique cette valeur est unique (pour toutes les entités), la mettre à 10 minutes, aurait pour impact de s’appliquer partout. C’est loin d’être assez précis dans certains cas.
Pour limiter, tu peux utiliser les entrées filtres. Un bout de doc d’une des fonctions par exemple
Les autres compteurs peuvent aussi être une option.
Du coup tu vas créer 2 entités, celle de tes PV avec les valeurs brutes (à ne pas mettre en base), et une avec les données filtrées (à stocker)
Après, à toi de voir si ça vaut vraiment le coup, je ne sais pas quelle est le fréquences de remontée de tes PV, mais si c’est de l’ordre de la minute, on parle de quelques Mo
ce n’est pas un bonne idée de mettre 10 ans dans le recorder.
Je sais que tu comptes ne garder que les entitiés que tu veux, mais tu aura des soucis de perf a un moment ou un autre.
Je base HA gère très bien les historiques à long terme (sans limite de temps).
Ca se fait tout seul… j’ai configuré la purge sur 7 jours dans le recorder, mais mes données de conso et de production sont gardées depuis plusieurs années sans config supplémentaire.