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

Bonjour à tous,

J’ai aidé à plusieurs reprises quelques jeedomiens à régler des pbs de lenteurs sur leur Jeedom, essentiellement liés à une mauvaise gestion des archives.
En effet, une mauvaise gestion des archives peut aboutir à des écritures disque nombreuses → augmentation de la charge du système lorsqu’on sait que les écritures disques sont souvent le maillon faible de nos systèmes, et accessoirement à une explosion de la taille des backups.

un rappel sur les paramètres en jeu :
Prenons un équipement qui génère 1 valeur historisée toutes les 1 minutes, soit 60 par heure, 1440 / jour
Sans paramétrage spécifique, on obtient 525600 valeurs archivées /an
Avec un mode de lissage « moyenne » et une durée de paquets de 1h. Ca veux dire qu’au moment de l’archivage, Jeedom va prendre un paquet de données de 1h, soit un jeu de 60 données, faire la moyenne et archiver cette moyenne, donc on n’archives qu’une valeur au lieu de 60, et donc 24 valeurs dans la journée et 8640 valeurs sur 1an, ce qui n’est rien comparé aux 525600 valeurs archivées sans ce lissage.

Multiplié ceci par le nb de vos commandes historisées, vous comprendrez l’impact d’une mauvaise gestion

Bref, plutôt que de réduire la durée d’archivage (c’est dommage), on joue plutot sur le mode de lissage pour diminuer le volume de données « archivées », et là, on peut sans risque archiver des années …

Autre élément primordial … ON HISTORISE QUE CE QUI EST NECESSAIRE.

Les paramètres disponibles

  • Au niveau général dans réglages >> système >> configuration >> équipements
    • Délai avant archivage (en heures) : Indique le délai avant que Jeedom n’archive une donnée (24h par défaut). C’est-à-dire que les données historisées doivent avoir plus de 24h pour être archivées (pour rappel, l’archivage va soit moyenner, soit prendre le maximum ou le minimum de la donnée sur une période qui correspond à la taille des paquets).
    • Archiver par paquet de (en heures) : Ce paramètre donne justement la taille des paquets (1h par défaut). Cela signifie par exemple que Jeedom va prendre des périodes de 1h, moyenner et stocker la nouvelle valeur calculée en supprimant les valeurs moyennées.
  • Au niveau de la commande info d’un équipement
    • Mode de lissage : moyenne, minimum, maximum ou aucun, fourmule utilisée pour traiter les « paquets » de données (cf « archiver par paquet de »)
    • Purger historique : délai de rétention des archives

Voilà, une fois le décor planté, reste à analyser notre existant … Rien de plus simple, vous trouverez un bloc code ci-après qui vous analysera les tables les plus grosses de votre Jeedom et pour les tables historyArch et history vous fera une analyse éventuelle.

Evolution du 27/03/23 : rajout d’un check des tables historisées qui génèrent des valeurs alphanumériques, beaucoup plus gourmandes en stockage que des données numériques

Quelques paramétrages au tout début pour définir les seuils d’alertes qui vous conviennent.
… Et vous decouvrirez l’ampleur du pb chez vous :wink:

!! LE CODE N’EXECUTE AUCUNE ACTION EN BASE, IL LISTE JUSTE LES PBS !!

$version = '04/05/2023 23:00' ;
$scenario->setLog('┌──────────── Logs bloc code - version du '.$version);
$scenario->setLog('| ');

$seuilalert24h     = 50 ;      // Seuil d'alerte pour le nb de ligne générées /24h pour une commande : 50 par defaut
$seuilArch         = 50000 ;   // Seuil d'alerte pour le nb de ligne archivées pour une commande : 50000 par defaut
$topXCmd           = 10 ;  	   // Recupere seulement les X commandes les plus volumineuses : 10 par defaut	
$seuilTailleTable  = 200 ;     // Seuil alerte en MB pour la taille d'une table : 200 MB par defaut
$seuilNbLigneTable = 2000000 ; // Seuil alerte pour le nb de lignes d'une table : 2 000 000 par defaut

// ANALYSE DU CRON D'ARCHIVAGE :
$archCron = cron::byClassAndFunction('history','archive') ;
$scenario->setLog('| -------- TACHE D\'ARCHIVAGE');
$scenario->setLog('| ');
$scenario->setLog('|     Actif    : '.$archCron->getEnable());
if ( !$archCron->getEnable() ) $scenario->setLog('| /!\ Tache d\'archivage inactive, pensez à l\'activer') ;
$scenario->setLog('|     Statut   : '.$archCron->getState());
if ( $archCron->getState() == 'error' ) $scenario->setLog('| /!\ Tache d\'archivage en erreur') ;
$scenario->setLog('|     Last run : '.$archCron->getLastRun());
$scenario->setLog('| ');
// RESUME
$sql_resume = "SELECT table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024)) as `MB`,table_rows as `Ligne` FROM information_schema.TABLES WHERE table_schema='jeedom' ORDER BY MB DESC LIMIT 5" ;
$results_resume = DB::Prepare($sql_resume, NULL, DB::FETCH_TYPE_ALL);
$scenario->setLog('| -------- RESUME');
$scenario->setLog('| ');
foreach ($results_resume as $result_resume) {
  $table = $result_resume['Table'];
  $taille = $result_resume['MB'];
  $nblign = $result_resume['Ligne'];
  $scenario->setLog('|     Table '.$table.' : Taille -> '.$taille.'MB , nb lignes -> '.$nblign);
  if ( $taille >= $seuilTailleTable || $nblign >= $seuilNbLigneTable ) $scenario->setLog('| /!\ Table Anormalement grosse, taille superieure au seuil ('.$taille.'MB)') ;
  if ( $nblign >= $seuilNbLigneTable ) $scenario->setLog('| /!\ Table Anormalement grosse, Nb de lignes superieur au seuil ('.$nblign.' lignes)') ;
}

// ANALYSE DES EQUIPEMENT
$scenario->setLog('| ');
$scenario->setLog('| -------- COMMANDES AVEC DONNEES VOLUMINEUSES');
$scenario->setLog('| ');
$sql = 'SELECT arch.cmd_id id, count(arch.value) as countarch FROM historyArch arch  GROUP BY arch.cmd_id ORDER BY countarch DESC LIMIT '.$topXCmd;

$results = DB::Prepare($sql, NULL, DB::FETCH_TYPE_ALL);
foreach ($results as $result) {

  $id = $result['id'];
  $nb_arch = $result['countarch'];
  $sql_cmddesc = 'SELECT cmd.id cmd_id, cmd.name cmd, eqLogic.name equipement,object.name objectname, cmd.eqType plugin, count(*) as counthist FROM cmd LEFT JOIN eqLogic ON cmd.eqLogic_id = eqLogic.id LEFT JOIN object ON eqLogic.object_id = object.id LEFT JOIN history ON cmd.id = history.cmd_id WHERE cmd.id = '.$id.' GROUP BY history.cmd_id ';
  $results_cmd = DB::Prepare($sql_cmddesc, NULL, DB::FETCH_TYPE_ALL);
  
  // recherche de la premiere date d'historique
  $sql_firstHist = 'SELECT datetime FROM historyArch WHERE cmd_id = '.$id.' ORDER BY datetime ASC LIMIT 1' ;
  $results_dateHist = DB::Prepare($sql_firstHist, NULL, DB::FETCH_TYPE_ALL);
  foreach ($results_dateHist as $result_dateHist) {
	$now_date = new DateTime("now");
	$diff = time() - strtotime($result_dateHist['datetime']);
	$diff_in_day = floor($diff / 86400);
    $nb_valeurParJour = round($nb_arch / $diff_in_day);
  }
    
  foreach ($results_cmd as $result_cmd) {
    $object = $result_cmd['objectname'] ;
    $equipement = $result_cmd['equipement'] ;
    $cmd = $result_cmd['cmd'] ;
    $plugin = $result_cmd['plugin'] ;
    $nb_hist = $result_cmd['counthist'] ;
    if (date('H') <= 5 ) $timestamp_archivage = mktime(5, 0, 0, date("m")  , date("d")-1, date("Y"));
    else $timestamp_archivage = mktime(5, 0, 0, date("m")  , date("d"), date("Y"));
    
    // recup de la config de la commande
    $conf_histo = cmd::byId($id)->getIsHistorized() ;
    $conf_histoMode = cmd::byId($id)->getConfiguration('historizeMode') ;
    if ( $conf_histoMode == '' || $conf_histoMode == 'none' ) $conf_histoMode = 'aucun' ;
    $conf_histopurge = cmd::byId($id)->getConfiguration('historyPurge') ;
    if ( $conf_histopurge == '' || $conf_histopurge == 'none' ) $conf_histopurge = 'aucun' ;
    $nb_hist24h = round($nb_hist * 86400 / ( time() - $timestamp_archivage)) ;
    $scenario->setLog('| '.$plugin.' -> #['. $object .']['.$equipement.']['.$cmd.']# (id : '.$id.')');
    if ( $nb_hist24h >= $seuilalert24h && $conf_histoMode == 'aucun' && $conf_histopurge == 'aucun' ) $scenario->setLog('| /!\ PB DE PARAMETRAGE, nb de valeur par 24h important ('. $nb_hist24h.') et aucun lissage ni aucune purge paramétrés');    
    if ( $nb_arch >= $seuilArch ) $scenario->setLog('| /!\ PB DE PARAMETRAGE, nb de valeur archivéess trop importantes ('. $nb_arch.'), superieur à '.$seuilArch);    
    $scenario->setLog('|     Configuration : historisé -> '.$conf_histo.' , lissage -> '. $conf_histoMode . ' , purge -> '. $conf_histopurge  ) ;
    $scenario->setLog('|     Historique    : '.$nb_hist.' valeurs (estimation sur 24h : '.$nb_hist24h.')' );
    $scenario->setLog('|     Archives      : '.$nb_arch.' valeurs depuis '.$diff_in_day.' jours ('.$nb_valeurParJour.' valeurs par jour en moyenne)');
    $scenario->setLog('|');
          
    
  } 
}

// ANALYSE DES EQUIPEMENT
$scenario->setLog('| -------- COMMANDES AVEC DONNEES ALPHANUMERIQUES');
$scenario->setLog('| ');
$sql = "SELECT cmd_id id, sum(LENGTH(value)) countarch FROM historyArch WHERE value REGEXP '[a-z;A-Z]' GROUP BY cmd_id ORDER BY countarch DESC LIMIT ".$topXCmd;

$results = DB::Prepare($sql, NULL, DB::FETCH_TYPE_ALL);
foreach ($results as $result) {

  $id = $result['id'];
  $nb_arch = $result['countarch'];
  $sql_cmddesc = 'SELECT cmd.id cmd_id, cmd.name cmd, eqLogic.name equipement,object.name objectname, cmd.eqType plugin, sum(LENGTH(history.value)) as counthist FROM cmd LEFT JOIN eqLogic ON cmd.eqLogic_id = eqLogic.id LEFT JOIN object ON eqLogic.object_id = object.id LEFT JOIN history ON cmd.id = history.cmd_id WHERE cmd.id = '.$id.' GROUP BY history.cmd_id ';
  $results_cmd = DB::Prepare($sql_cmddesc, NULL, DB::FETCH_TYPE_ALL);
  
  // recherche de la premiere date d'historique
  $sql_firstHist = 'SELECT datetime FROM historyArch WHERE cmd_id = '.$id.' ORDER BY datetime ASC LIMIT 1' ;
  $results_dateHist = DB::Prepare($sql_firstHist, NULL, DB::FETCH_TYPE_ALL);
  foreach ($results_dateHist as $result_dateHist) {
	$now_date = new DateTime("now");
	$diff = time() - strtotime($result_dateHist['datetime']);
	$diff_in_day = floor($diff / 86400);
    $nb_valeurParJour = round($nb_arch / $diff_in_day);
  }
    
  foreach ($results_cmd as $result_cmd) {
    $object = $result_cmd['objectname'] ;
    $equipement = $result_cmd['equipement'] ;
    $cmd = $result_cmd['cmd'] ;
    $plugin = $result_cmd['plugin'] ;
    $nb_hist = $result_cmd['counthist'] ;
    if ( $nb_hist == '' ) $nb_hist = 0 ;
    if (date('H') <= 5 ) $timestamp_archivage = mktime(5, 0, 0, date("m")  , date("d")-1, date("Y"));
    else $timestamp_archivage = mktime(5, 0, 0, date("m")  , date("d"), date("Y"));
    
    // recup de la config de la commande
    $conf_histo = cmd::byId($id)->getIsHistorized() ;
    $conf_histoMode = cmd::byId($id)->getConfiguration('historizeMode') ;
    if ( $conf_histoMode == '' || $conf_histoMode == 'none' ) $conf_histoMode = 'aucun' ;
    $conf_histopurge = cmd::byId($id)->getConfiguration('historyPurge') ;
    if ( $conf_histopurge == '' || $conf_histopurge == 'none' ) $conf_histopurge = 'aucun' ;
    $nb_hist24h = round($nb_hist * 86400 / ( time() - $timestamp_archivage)) ;
    $scenario->setLog('| '.$plugin.' -> #['. $object .']['.$equipement.']['.$cmd.']# (id : '.$id.')');
    if ( $nb_hist24h >= $seuilalert24h && $conf_histoMode == 'aucun' && $conf_histopurge == 'aucun' ) $scenario->setLog('| /!\ PB DE PARAMETRAGE, nb de valeur par 24h important ('. $nb_hist24h.') et aucun lissage ni aucune purge paramétrés');    
    if ( $nb_arch >= $seuilArch ) $scenario->setLog('| /!\ PB DE PARAMETRAGE, nb de valeur archivéess trop importantes ('. $nb_arch.'), superieur à '.$seuilArch);    
    $scenario->setLog('|     Configuration : historisé -> '.$conf_histo.' , lissage -> '. $conf_histoMode . ' , purge -> '. $conf_histopurge  ) ;
    $scenario->setLog('|     Historique    : '.$nb_hist.' caractères (estimation sur 24h : '.$nb_hist24h.')' );
    $scenario->setLog('|     Archives      : '.$nb_arch.' caractères depuis '.$diff_in_day.' jours ('.$nb_valeurParJour.' caractères par jour en moyenne)');
    $scenario->setLog('|');
          
    
  } 
}

$scenario->setLog('└───────────────────────────');

Pour voir le résultat, on lance le bloc code via un scenario et on vérifie les logs du scenario, c’est on ne peut plus simple, avec un retour de ce type :

Une section TACHE D’ARCHIVAGE

[2023-05-04 23:16:00][SCENARIO] | -------- TACHE D'ARCHIVAGE
[2023-05-04 23:16:00][SCENARIO] |
[2023-05-04 23:16:00][SCENARIO] |     Actif    : 1
[2023-05-04 23:16:00][SCENARIO] |     Statut   : stop
[2023-05-04 23:16:00][SCENARIO] |     Last run : 2023-05-04 05:00:05

Une section RESUME avec les 5 tables les plus grosses

[2023-03-26 10:41:39][SCENARIO] ┌──────────── Logs bloc code - version du 25/03/2023 19:00
[2023-03-26 10:41:39][SCENARIO] |
[2023-03-26 10:41:39][SCENARIO] | -------- RESUME
[2023-03-26 10:41:39][SCENARIO] |
[2023-03-26 10:41:39][SCENARIO] |     Table historyArch : Taille -> 82MB , nb lignes -> 1266492
[2023-03-26 10:41:39][SCENARIO] | /!\ Table Anormalement grosse, taille superieure au seuil (82MB)
[2023-03-26 10:41:39][SCENARIO] | /!\ Table Anormalement grosse, Nb de lignes superieur au seuil (1266492 lignes)
[2023-03-26 10:41:39][SCENARIO] |     Table conso_teleinfo : Taille -> 54MB , nb lignes -> 371482
[2023-03-26 10:41:39][SCENARIO] | /!\ Table Anormalement grosse, taille superieure au seuil (54MB)
[2023-03-26 10:41:39][SCENARIO] |     Table history : Taille -> 5MB , nb lignes -> 23905
[2023-03-26 10:41:39][SCENARIO] |     Table cmd : Taille -> 2MB , nb lignes -> 3709
[2023-03-26 10:41:39][SCENARIO] |     Table config : Taille -> 2MB , nb lignes -> 1683
[2023-03-26 10:41:39][SCENARIO] |
[2023-03-26 10:41:39][SCENARIO] | -------- FIN RESUME

Une section EQUIPEMENTS avec les équipements (nb paramétrable) qui ont le plus de lignes dans les archives, et les alertes éventuelles

[2023-03-26 10:41:39][SCENARIO] | -------- EQUIPEMENTS
[2023-03-26 10:41:39][SCENARIO] |
[2023-03-26 10:41:39][SCENARIO] | teleinfo -> #[Electricité][021775837695][BBRHCJB]# (id : 39862)
[2023-03-26 10:41:39][SCENARIO] | /!\ PB DE PARAMETRAGE, nb de valeur par 24h important (3886) et aucun lissage ni aucune purge paramétrés
[2023-03-26 10:41:39][SCENARIO] |     Configuration : historisé -> 1 , lissage -> aucun , purge -> aucun
[2023-03-26 10:41:39][SCENARIO] |     Historique    : 922 valeurs (estimation sur 24h : 3886)
[2023-03-26 10:41:39][SCENARIO] |     Archives      : 28834 valeurs depuis 10 jours (2883 valeurs par jour en moyenne)
[2023-03-26 10:41:39][SCENARIO] |
[2023-03-26 10:41:39][SCENARIO] | teleinfo -> #[Electricité][021775837695][BBRHPJB]# (id : 39863)
[2023-03-26 10:41:39][SCENARIO] | /!\ PB DE PARAMETRAGE, nb de valeur par 24h important (3886) et aucun lissage ni aucune purge paramétrés
[2023-03-26 10:41:39][SCENARIO] |     Configuration : historisé -> 1 , lissage -> aucun , purge -> aucun
[2023-03-26 10:41:39][SCENARIO] |     Historique    : 922 valeurs (estimation sur 24h : 3886)
[2023-03-26 10:41:39][SCENARIO] |     Archives      : 28834 valeurs depuis 10 jours (2883 valeurs par jour en moyenne)
[2023-03-26 10:41:39][SCENARIO] |
[2023-03-26 10:41:39][SCENARIO] | teleinfo -> #[Electricité][021775837695][BBRHCJW]# (id : 39864)
[2023-03-26 10:41:39][SCENARIO] | /!\ PB DE PARAMETRAGE, nb de valeur par 24h important (3886) et aucun lissage ni aucune purge paramétrés
[2023-03-26 10:41:39][SCENARIO] |     Configuration : historisé -> 1 , lissage -> aucun , purge -> aucun
[2023-03-26 10:41:39][SCENARIO] |     Historique    : 922 valeurs (estimation sur 24h : 3886)
[2023-03-26 10:41:39][SCENARIO] |     Archives      : 28834 valeurs depuis 10 jours (2883 valeurs par jour en moyenne)
[2023-03-26 10:41:39][SCENARIO] |
[2023-03-26 10:41:39][SCENARIO] | teleinfo -> #[Electricité][021775837695][BBRHPJW]# (id : 39865)
[2023-03-26 10:41:39][SCENARIO] | /!\ PB DE PARAMETRAGE, nb de valeur par 24h important (3886) et aucun lissage ni aucune purge paramétrés
[2023-03-26 10:41:39][SCENARIO] |     Configuration : historisé -> 1 , lissage -> aucun , purge -> aucun
[2023-03-26 10:41:39][SCENARIO] |     Historique    : 922 valeurs (estimation sur 24h : 3886)
[2023-03-26 10:41:39][SCENARIO] |     Archives      : 28834 valeurs depuis 10 jours (2883 valeurs par jour en moyenne)
[2023-03-26 10:41:39][SCENARIO] |
[2023-03-26 10:41:39][SCENARIO] | teleinfo -> #[Electricité][021775837695][BBRHCJR]# (id : 39866)
[2023-03-26 10:41:39][SCENARIO] | /!\ PB DE PARAMETRAGE, nb de valeur par 24h important (3886) et aucun lissage ni aucune purge paramétrés
[2023-03-26 10:41:39][SCENARIO] |     Configuration : historisé -> 1 , lissage -> aucun , purge -> aucun
[2023-03-26 10:41:39][SCENARIO] |     Historique    : 922 valeurs (estimation sur 24h : 3886)
[2023-03-26 10:41:39][SCENARIO] |     Archives      : 28834 valeurs depuis 10 jours (2883 valeurs par jour en moyenne)

Pour corriger ceci, rien de plus facile. il faut aller soit sur la page de la commande,

soit dans analyse >> historique pour corriger en masse

… ET ATTENDRE L’ARCHIVAGE à 5h du matin ou le lancer manuellement

SI vous avez supprimé des commandes, n’hésitez pas aussi à lancer un « Nettoyage de la base de données » dans les outils _OS/DB

Bon courage à tous, et j’espere que ce petit post vous sera utile

Norbert

32 « J'aime »

Hello,
Merci pour ton code.
Je l’ai lancé mais j’ai ce résultat. Etrange 395Mb pour 0 ligne, non ?
Mathieu

[2023-03-26 21:22:38][SCENARIO] |     Table timeline : Taille -> 395MB , nb lignes -> 0
[2023-03-26 21:22:38][SCENARIO] | /!\ Table Anormalement grosse, taille superieure au seuil (395MB)

tu peux essayer ca pour récupérer l’espace non utilisé (vu là : Charge machine .... le reste - #27 par superbricolo)

ALTER TABLE timeline ENGINE=MyISAM ;
OPTIMIZE TABLE timeline
ALTER TABLE timeline ENGINE=InnoDB;

Mais pour le coup, ca n’a pas vraiment d’impact. c’est le fonctionnement des DB que d’allouer de l’espace et de ne pas le liberer ensuite

Norbert

superbe !!
très utile !!

merci

Une nuit passée, plus de problème :slight_smile:

1 « J'aime »

Une petite évolution du bloc code pour integrer dans l’audit une recherche des tables historisant des données alphanumériques (textes) par définition beaucoup plus grosses en terme de stockage

Il suffit de remplacer le précèdent bloc code par le nouveau du premier post.

rendu :

[2023-03-27 22:44:08][SCENARIO] | -------- COMMANDES AVEC DONNEES ALPHANUMERIQUES
[2023-03-27 22:44:08][SCENARIO] |
[2023-03-27 22:44:08][SCENARIO] | mode -> #[St Etienne][Mode chauffage][Mode]# (id : 488)
[2023-03-27 22:44:08][SCENARIO] |     Configuration : historisé -> 1 , lissage -> aucun , purge -> aucun
[2023-03-27 22:44:08][SCENARIO] |     Historique    : 25 caractères (estimation sur 24h : 34)
[2023-03-27 22:44:08][SCENARIO] |     Archives      : 8252 caractères depuis 706 jours (12 caractères par jour en moyenne)
[2023-03-27 22:44:08][SCENARIO] |
[2023-03-27 22:44:08][SCENARIO] | mode -> #[St Etienne][Chauffage - SdB][Mode]# (id : 771)
[2023-03-27 22:44:08][SCENARIO] |     Configuration : historisé -> 1 , lissage -> aucun , purge -> aucun
[2023-03-27 22:44:08][SCENARIO] |     Historique    : 33 caractères (estimation sur 24h : 45)
[2023-03-27 22:44:08][SCENARIO] |     Archives      : 8147 caractères depuis 706 jours (12 caractères par jour en moyenne)
[2023-03-27 22:44:08][SCENARIO] |
[2023-03-27 22:44:08][SCENARIO] | mode -> #[St Etienne][Chauffage - Cuisine][Mode]# (id : 5154)
[2023-03-27 22:44:08][SCENARIO] |     Configuration : historisé -> 1 , lissage -> aucun , purge -> aucun
[2023-03-27 22:44:08][SCENARIO] |     Historique    : 30 caractères (estimation sur 24h : 41)
[2023-03-27 22:44:08][SCENARIO] |     Archives      : 8003 caractères depuis 564 jours (14 caractères par jour en moyenne)
[2023-03-27 22:44:08][SCENARIO] |
[2023-03-27 22:44:08][SCENARIO] | JeedomConnect -> #[Norbert][JC_Norbert][Réseau wifi (SSID)]# (id : 8105)
[2023-03-27 22:44:08][SCENARIO] | /!\ PB DE PARAMETRAGE, nb de valeur par 24h important (61) et aucun lissage ni aucune purge paramétrés
[2023-03-27 22:44:08][SCENARIO] |     Configuration : historisé -> 1 , lissage -> aucun , purge -> aucun
[2023-03-27 22:44:08][SCENARIO] |     Historique    : 45 caractères (estimation sur 24h : 61)
[2023-03-27 22:44:08][SCENARIO] |     Archives      : 7496 caractères depuis 331 jours (23 caractères par jour en moyenne)
6 « J'aime »

Merci bcp pour ce tuto
Cela m’a permis de faire un grand nettoyage et divisé par 10 le nombre de lignes :slightly_smiling_face:

C’était le but … Pour ma part, je suis passé d’une taille d’archive de + de 200Mo à 50 Mo, et de 2M. De lignes à 500000 lignes.

Norbert

Entre le scénario du 25/03 et celui du 27/03, je n’ai plus la table history.
Pas grave, elle n’était pas énorme 0 Go :smile: mais c’est juste pour signaler la différence entre les 2 exécutions…

A quel niveau, la table a disparu ?
Sur le résumé en 1er ?
Si c’est le cas, c’est qu’elle ne fait plus parti du top 5 des tables les plus grosses
Norbert

1 « J'aime »

Il y a une subtilité sur les commandes binaires ? J’ai mes trois premières commandes du top 5 qui correspondent à des detections de présence qui restent en tête (c’est mes trois premiers périphériques…). J’ai mis une purge a un an mais rien n’y fait.

En tout cas mes sauvegarde on gagnée 40 Mo.

Ah, c’est que le top 5. Ok ca doit être ca.
Merci pour l’info

Tu as relancé la tâche d’archivage ?

Oui j’ai attendu la nuit. Ça a bien eu une action puisque ma sauvegarde a fondue. Après c’est mas très grave en soit. Mais comme les binaires n’ont pas de lissage je le demandais si ça venait pas de là.

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: