Performances gladys sur RPI

Salut :slight_smile:
Je crée ce poste car j’ai la forte impression sans pouvoir le prouver que je génère des
ralentissements dans la réflexion de gladys, je souhaite donc savoir si c’est normal et s’il y avais un moyen d’optimiser tout cela.

Ma configuration se résume ainsi :

  • env. 100 deviceType, presque tous binaires (type rflink pour ceux qui sont souvent modifiés)

  • env. 30 scénarios dont 22 qui ont pour déclencheur devicetype-new-value.

  • 20 modules

  • 30 scripts

  • Image raspbian complète sur RPI3B+, installation de gladys manuelle et sans problèmes
    (vnc + accès ftp en arrière plan mais ils ne consomment rien).

J’utilise principalement des scénarios de lumières qui gèrent mes 10 points lumineux dans l’appartement, qui sont TOUS modifiés à chaque activation d’un scénario (avec un délai de 300ms entre chaque car c’est du RFLINK, et une redondance donc 20 modifications au total), ce qui as pour effet de déclencher 20 fois l’event devicetype-new-value et donc 20*22 la vérif des conditions de scénarios et autant de lignes de logs :disappointed_relieved:,

Quand je lance un scénario d’éclairage, il arrive par moment qu’il s’écoule plusieurs secondes entre la commande et l’exécution de l’ordre, comme si gladys était surchargée

Ma configuration est elle limite pour les performance du raspberry pi ? Est-ce qu’une optimisation peut être faite facilement ?

Je remarque aussi beaucoup d’accès disques sur la carte du RPI (avec la LED) au moment du lancement des commandes. L’ecriture des lignes dans les logs ou la lecture de la BDD peuvent en être l’origine et donc causer ce ralentissement ?

EDIT : je viens de check j’ai plus de 230Mo de logs de gladys :fearful:

En effet, c’est ce problème également !
Les plus gros freeze sont présent au moment d’un “checkUserPresence” ou autres vérification du type.
L’utilisation du CPU ne monte pas autant que ce qui est indiqué mais mon RPI est très bien refroidi, je suis à 42° max donc il tourne plus vite qu’un autre à 80° et j’ai quand même 200% d’utilisation par mysql en pic.

Concernant les index, tu as fait la manip ? Je comprends l’idée générale mais je ne sais pas comment la mettre en place (ça a peut être été fait par pierre-gilles depuis 2017 ?) :wink:

J’ai fait du ménage (160 000 entrées en moins…) et j’ai réalisé les tests de temps de réponses de pti_nico.
La ou lui avais 0.10 secondes et trouvait ça long j’ai presque 1 seconde !

Summary

mysql> SELECT user.id, MAX(event.datetime) as datetime FROM user JOIN event ON event.user = user.id JOIN eventtype ON event.eventtype = eventtype.id WHERE ( eventtype.code = ‹ back-at-home › OR eventtype.code = ‹ user-seen-at-home › ) AND event.house = 1 AND user.id IN ( SELECT user.id FROM user WHERE ( SELECT eventtype.code FROM event JOIN eventtype ON event.eventtype = eventtype.id WHERE ( eventtype.code = ‹ back-at-home › OR eventtype.code = ‹ left-home › ) AND event.user = user.id AND event.house = 1 ORDER BY datetime DESC LIMIT 1 ) = ‹ back-at-home › ) GROUP BY user.id HAVING datetime < DATE_SUB(NOW(), INTERVAL 10 MINUTE);
Empty set (0.88 sec)

Avec les index des champs datetime et eventtype, je passe à 0.40 sec puis 0.03 sec !

Les index sont a refaire souvent ou c’est automatique ?

Merci des pistes en tout cas !