Problème de performance sur dashboard avec beaucoup de graphiques

Salut @lmilcent !

A part taper directement dans la DB, j’ai pas d’astuce particulière :slight_smile: Ca prend vraiment trop de temps sur ton Pi ?

Tu peux utiliser un programme comme TablePlus sur ton PC pour avoir une interface d’accès propre à ta DB.

Pense bien à stopper Gladys avant de récupérer/remettre ta nouvelle DB

En effet, je m’étais rendu compte que ça corromp la base sinon.

Oui je te confirme, ça tourne depuis plus de 12h, pour la suppression d’une seule feature. Mais je sais que c’est lié à deux choses : une DB de 8Go et un RPi avec une carte SD et pas un SSD.

Si tu as ça sous la main, tu peux me rappeler comment :

  1. Lister les features par devices
  2. Supprimer les données d’une feature (et je désactiverais ensuite leur stockage dans l’interface)

Sinon j’irais chercher dans le code source :sweat_smile::sweat_smile:

Merci :slight_smile:

C’est ici:

Ensuite pour supprimer les états d’une feature:

DELETE FROM t_device_feature_state WHERE device_feature_id = 'cca32009-8d8f-4965-b658-bdb28eb31300';
DELETE FROM t_device_feature_state_aggregate WHERE device_feature_id = 'cca32009-8d8f-4965-b658-bdb28eb31300';

Ne pas oublier à la fin:

VACUUM;
2 « J'aime »

Merci, je savais bien que tu avais déjà fait le taf pour moi au moins une fois😂
Désolé pour la demande en doublon, et merci encore !!

1 « J'aime »

Résultats en image : une taille réduite de 50% :tada:

Désormais ma DB fait 3.8Go contre plus de 8Go !

Niveau sauvegardes (perso) ça se ressent :

4 « J'aime »

C’est super, j’ai aussi réduit de 1.6Go ma base et que ça fait du bien les dashbord qui charge immédiatement ! :smiley:

3 « J'aime »

ça fait plaisir à lire tout ça :smiley:

2 « J'aime »

On pourrait aussi cleaner la table location, on a tout l’historique de localisation mais ça sert à rien on est d’accord ?

Dans Gladys 3 on avait une fonctionnalité, on pouvait voir l’historique de ces déplacements, je trouvais ça pratique :slight_smile:

Cette table est vraiment grosse chez toi ?

Je l’avais clean il y’a quelques semaines, je l’ai fait ce matin ( env 60000 lignes )

Je ne vois pas de use case sur l’historique de localisation.

Ok, 60k lignes c’est rien :slight_smile: on pourra mettre à terme une tâche pour vider l’historique (un peu comme on fait avec les states: derniers 6 mois, dernière année, etc…)

Super la base de donnée a été réduite aussi chez moi et cela se ressent sur l’affichage des graphiques.:grinning:

Par contre maintenant j’ai un problème à chaque modification d’un device, par exemple son nom, cela me bloque Gladys pendant plusieurs minutes. (facile 10 à 15 min):disappointed_relieved:

Est-ce normal?

Je pourrais donner plus de détails et faire des tests mais en soirée si besoin.

Du coup j’ai fait un essai pour ajouter une fonctionnalité à un device MQTT.

J’ai du attendre environ 22 min pour que la page s’affiche après la sauvegarde

Je te confirme j’ai le même bug.
En modifiant mes device MQTT a chaque fois c’est très long jusqu’à indiqué qu’une erreur s’est produite.

Je suis obligé de redémarrer l’instance Gladys pour que ça refonctionne mais la modification est prise en compte

J’ai rencontré le même problème lorsque j’ai enlevé l’historique des devices.

Je n’avais pas eu le temps de faire remonter l’information.

Idem chez moi.

@pierre-gilles je ne sais pas si c’est le cas, mais on dirait réellement que soit la base de données soit Gladys est en mode bloquant à ce moment là.
Car vraiment plus rien ne répond. Donc soit j’ai totalement tord (ce serait pas la première fois :sweat_smile:), soit il y a quelque chose à faire pour optimiser un peu cette partie.

De mon côté, je vois un processus node index.js à 100% du CPU, quand l’écriture sur la carte SD de mon Raspberry Pi ne semble pas à 100% de I/O.

Salut à tous !

En fait lorsque vous enregistrez un appareil, Gladys va faire 2 choses:

  • Si certaines features sont en historique désactivés, Gladys va purger tous les états de ces features. Cela représente potentiellement des millions de lignes sur certaines DB, ce qui peut bloquer la DB pendant pas mal de temps lors de la suppression.
  • Après ça, Gladys lance un VACUUM, opération qui va « réellement » supprimer la data du disque, et libérer de l’espace. VACUUM est une opération bloquante, et pendant toute la durée du VACUUM, la DB, et donc Gladys, n’est pas accessible. Sur les petites DB, c’est invisible, sur les grosses DB, ça peut prendre 20 minutes et effectivement on a l’impression que c’est « cassé », alors que non ça travaille juste !

La solution que je vois :

  • Coder une tâche de suppression d’états « background » qui supprime en petit batch afin que Gladys ne soit pas bloquée lors de la suppression de features à millions d’états. Il faut faire des tests et trouver le bon chiffre pour que ce soit ni trop bloquant, ni trop lent.
  • Retirer le VACUUM immédiat et mettre en place une tâche de VACUUM nocturne programmée et activable/désactivable (toutes les semaines par exemple).

La contrepartie de tout ça, c’est que l’effet « libération de stockage » ne sera plus immédiat, suite à une purge d’états il faudra attendre la prochaine nuit ou attendre une semaine que Gladys se purge. Eventuellement, on peut mettre un bouton quelque part pour purger manuellement mais il faut que l’utilisateur soit conscient que Gladys sera indisponible pendant tout le temps de la purge.

Par contre j’ai une assez grosse semaine donc je pense pas pouvoir regarder dans les jours qui viennent, je regarderais soit en fin de semaine, soit dans le courant de la semaine prochaine ! Je vous tiens au courant :slight_smile:

3 « J'aime »

Pas de soucis !

Je ne pense pas que ce soit urgent dans le sens où rien n’est cassé et que c’est seulement lorsque l’on retire l’historique :slight_smile:

Merci de l’analyse!

Mais 20 min pour une petite modif de nom par exemple c’est très long. C’est très bloquant voir assez agaçant en faite, même si on sait que Gladys n’est pas cassé et qu’elle travaille en fond.

Pour ma part je pense que le nettoyage peut attendre plus tard comme tu le proposes. Et activable/désactivable par l’utilisateur peut être bien.

Merci pour les détails, je comprends mieux pourquoi on a tous la sensation que c’est bloquant.
Je suis pour la solution du VACUUM la nuit (entre 2h et 4h du matin par exemple).
Quel utilisateur va réellement se soucier de la taille de sa DB à quelques heures près ?

1 « J'aime »