Réduire la taille de la table mdl_logstore_standard_log de la DB Moodle

Hello,

Au printemps 2020, suite à l’apparition du fameux et désormais bien connu virus SARS-CoV-2 responsable de la Covid-19 et face aux bouleversements en terme d’organisation un peu partout, j’ai installé rapidement (à l’arrache pourrait-on presque dire) et temporairement le LMS Moodle sur un VPS hébergé chez OVH.

N’ayant pas spécialement beaucoup de temps à disposition, l’installation a été réalisée le plus simplement possible (création de la DB, récupération de l’archive sur le site officiel de Moodle, création du Virtual Host Apache HTTPD et génération des certificats TLS avec Let’s Encrypt). L’objectif était de rapidement disposer d’une plateforme fonctionnelle où y déposer les ressources pédagogiques pour les formations en cours de cette année scolaire.

Comme je le précisais, je n’avais pas le temps de potasser dans les moindres détails les bonnes pratiques d’une installation de Moodle en bonne et due forme, et encore moins concernant son administration ainsi que sa maintenance.

La plateforme a rapidement fait le job et c’était le principal.

Je m’apprête à décommissionner prochainement ce Moodle après ses bons et loyaux services rendus aux personnes concernées.

Récemment toutefois, sur le VPS qui l’héberge, j’ai constaté à plusieurs reprises que l’espace de stockage arrivait à saturation à cause d’une table de la DB de Moodle. J’ai un script « custom » qui sauvegarde toutes les nuits les DB, les fichiers de configuration, les contenus des dossiers Apache (j’en parlerai peut-être un de ces quatre ici…) avec une rétention locale pendant une petite poignée de jours (pour rapidement revenir en arrière d’un, deux ou trois jours) et un export chez Swiss Backup d’Infomaniak car on n’est jamais trop prudent.

Après analyse rapide de l’espace disque utilisé (avec ncdu), je constate que la table mdl_logstore_standard_log est tout simplement énorme ! Plus d’1 Go ! Une recherche rapide sur le Net et je comprends que c’est à cause du réglage par défaut de conservation des logs (pour faire simple, tout est conservé dans les logs depuis le début).

Pour changer ça : on se connecte à Moodle en tant qu’administrateur, on suit le chemin Administration du site > Plugins > Journaux > Journaux standards et il suffit de changer la valeur de « Conserver les journaux durant » (il n’est pas recommandé de choisir une valeur inférieure à 30 jours de rétention). Dans mon cas, j’ai donc choisi 35 jours.

Normalement, à ce que j’ai vu, un cron est censé faire le job après et supprimer les anciens logs devenus obsolètes.

Toutefois, pour « corriger » le souci manuellement, voici ce qu’il faut faire : on se connecte à son gestionnaire de base de données, on choisit la DB liée à Moodle puis on exécute les commandes suivantes (en ayant au préalable réalisé une sauvegarde de la DB bien entendu) :

DELETE FROM mdl_logstore_standard_log WHERE timecreated < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY));

OPTIMIZE TABLE mdl_logstore_standard_log;

La 1ère ligne va supprimer les entrées supérieures à 30 jours de rétention et la seconde va optimiser l’espace utilisé en « récupérant » l’espace libre ainsi créé.

Le résultat est sans appel. Dans mon cas, la table fait désormais moins de 125 Mo.