Tuto - analyser les archives pour détecter des pbs (lenteurs / espaces disques)

Le bloc code doit te donner le nb de jours de l’événement le plus ancien, si c’est 365, c’est que tout est ok, juste que tu as beaucoup de détections de présence

Oui c’est ça. Autant pour les deux dans le couloir ça me paraît logique, autant celui dans la chambre qui est top 1 c’est spé.
Je creuse un peu plus tard. Merci pour le boulot en tout cas, un peu de maintenance ne fait jamais de mal.

1 « J'aime »

Salut @ngrataloup,

Merci pour ton code et ce super tuto.

Voici le log du scénario
scenario68.txt (14,2 Ko)

Quand je vais dans les configurations des commandes, je n’ai pas la même chose que toi dans le champ Historique. Il me manque Mode de lissage :

La commande est de type Autre :

Je crois que le lissage n’est actif que pour les numériques.

1 « J'aime »

Comme l’a dit @Idaho947, le lissage, c’est un calcul mathématique … Donc nécessité d’un type numérique.
Si ta commande ne peut avoir que des nombres comme valeur, tu peux la basculer sur un type numérique sans pb.

Norbert

Merci pour ce boulot !

Grâce à ton code, comme bcp je pense j’ai pu mettre en avant des trucs auxquels je n’avais pas pensé.

C’est vraiment un MUST HAVE !

:pray: :pray: :beers: :beers:

Merci, c’était le but que de partager un truc utile :wink:

Norbert

1 « J'aime »

Bonjour et merci pour ce travail.
Je rencontre un problème pour supprimer les archives, ci dessous un exemple.
J’ai lancé hier le script.
L’équipement avec id : 568 était en warning, aucune purge.
J’ai réglé la purge à 7 jours .

Je relance le script ce matin, la purge est bien à 7 jours.
Mais j’ai encore 923 jours en archives.

Que puis je faire ?

PS : j’ai aussi fait un « Nettoyage de la base de données » dans les outils _OS/DB

Merci par avance

Pourquoi as-tu - (moins) 7 jours au niveau du délai de purge ?
As tu mis -7 dans la conf de la commande ?
Si oui, il faut mettre 7
(Je ne suis pas sur mon poste, donc difficile de vérifier chez moi)

Norbert

Non j’ai juste mis 7 jours mais cela s’affiche avec un « - »…

1 « J'aime »

Du coup, faudra que je creuse… La tache d’archivage est bien passée cette nuit ?

je vérifie comment stp ?

2 « J'aime »

Salut, tu peux aller sur Réglages > Système > Moteur de taches et chercher la tache de classe « history » qui lance la fonction « archive ».

Dans mon exemple elle à tourné ce jour à 5h du matin et à duré 9s.

Salut @ngrataloup et merci beaucoup pour ce partage !

De mon coté, je suis également l’évolution du stockage dans la BDD Jeedom pour essayer de l’optimiser au mieux. Par contre, je me suis orienté uniquement sur la table historyArch car c’est la plus sensible pour moi.
Par contre étant plus à l’aise en SQL qu’en php, j’avais fait la requete SQL suivante pour analyser et optimiser mes historiques dans jeedom. Elle est beaucoup moins plug&play que ton scénario mais elle correspondait parfaitement à mon besoin.
Je la partage ici au cas où elle puisse servir à quelqu’un :slight_smile:

SELECT cmd.id, cmd.eqType as TypeCommande,
cmd.name as Commande,
cmd.subType as TypeValeur,
cmd.unite as Unite,
eqLogic.name as Equipement,
object.name as Piece,
CASE
    WHEN cmd.generic_type IS NULL THEN ""
    ELSE lower(cmd.generic_type)
END as TypeGenerique,
CASE
    WHEN JSON_EXTRACT(cmd.configuration,'$.historyPurge') IS NULL THEN "Aucun"
    WHEN JSON_EXTRACT(cmd.configuration,'$.historyPurge') = "" THEN "Aucun"
    ELSE JSON_UNQUOTE(JSON_EXTRACT(cmd.configuration,'$.historyPurge'))
END as PurgeAuto,
CASE
    WHEN JSON_UNQUOTE(JSON_EXTRACT(cmd.configuration,'$.historizeMode')) IS NULL THEN "Aucun"
    WHEN JSON_UNQUOTE(JSON_EXTRACT(cmd.configuration,'$.historizeMode')) = "none" THEN "Aucun"
    ELSE JSON_UNQUOTE(JSON_EXTRACT(cmd.configuration,'$.historizeMode'))
END as Lissage,
min(historyArch.datetime) as HistoPlusAncien, max(historyArch.datetime) as HistoPlusRecent,
DATEDIFF(max(historyArch.datetime),min(historyArch.datetime)) as DeltaJoursHisto,
round(count(historyArch.value)/DATEDIFF(max(historyArch.datetime),min(historyArch.datetime)),2) as NbMesuresMoyenneJour,
count(historyArch.value) as NbreMesuresTotal
FROM cmd
JOIN eqLogic on cmd.eqLogic_id = eqLogic.id
JOIN object on eqLogic.object_id = object.id 
JOIN historyArch on cmd.id = historyArch.cmd_id
WHERE cmd.isHistorized = 1
GROUP BY cmd.id, cmd.eqType, cmd.unite, cmd.name, cmd.subType, eqLogic.name, object.name, cmd.configuration, cmd.generic_type
ORDER BY count(historyArch.value) DESC

Ci dessous deux exemple après avoir forcer la tache dans le moteur de tache.
J’ai beau limiter à 1 jour d’historique puis forcer la tache d’historisation dans le moteur des taches, il ne me supprime pas les archives depuis 1293 jours pour le premier exemple.

Je loupe quelque chose ?
Merci

1 « J'aime »

Pour le 1 er cas, historisation à 0 → je suppose donc que la fonction d’archivage ne passe pas sur cette commande → faire un nettoyage de base dans les outils d’administration.

Pour le 2nd cas, aucune donnée pour la journée → je suppose que la tâche d’archivage doit nettoyer seulement pour les commandes qu’elle traite, donc celle dont il y a au moins une donnée pour la journée → génère un e entrée pour cette commande et relance l’archivage pour faire un test (via un scénario et la fonction évent)

Norbert

1 « J'aime »

bonjour,

merci pour le tuto :ok_hand:

ainsi j’ai pu voir que mon archivage est énorme.

Table history : Taille -> 130MB , nb lignes -> 2219194

alors je suis passé sur pas mal de commandes pour indiquer des délais de rétentions (7j, 1mois, …)

et j’ai attendu 2 jours pour voir l’effet

au final, aujourdhui, j’ai encore

Table history : Taille -> 133MB , nb lignes -> 2313114

j’ai l’impression que l’archivage ne se lance pas
et je ne trouve rien dans le cron qui tourne à 5h00

j’ai parcouru la doc, mais pas trouvé (https://doc.jeedom.com/fr_FR/core/4.3/history)

comment vérifier que l’archivage se lance ?
comment faire pour lancer l’archivage manuellement ?

merci pour votre aide

On parle bien du cron de Jeedom :

et c’est cette tache :

oui c’est bien là que je cherchais, mais je ne l’avais pas vue… a priori, la source du problème est identifiée : pas actif

MERCI :+1:

tu devrais voir une grosse difference, parceque 2313114 lignes dans la table archive, c’est enorme
Norbert