Nettoyer la base de données WordPress : guide complet et outil gratuit
Pourquoi proposer ce plugin ?
Perspectives Marketing gère un parc de plus de 85 sites clients. Pour automatiser et sécuriser cette tâche, nous avons développé PM DB Cleaner, un plugin open source disponible gratuitement sur GitHub. D’abord créé pour un usage interne, sous forme de mu-plugin, il a peu à peu évolué jusqu’à devenir ce qu’il est aujourd’hui : globalement, on est passé d’un « outil de dev » à quelque chose d’un peu plus graphique, pour le confort d’utilisation.
Jusqu’ici, j’ai utilisé d’autres outils comme les excellents WP-Sweep, WPS Cleaner ou encore WP-Optimize, mais il y a toujours quelque chose qui ne me convenait pas : trop de risques pris parfois, trop d’options, ou alors des fonctionnalités que je n’utilisais pas (le cache chez WP-Optimize par exemple), et surtout je voulais un truc léger.
Je suis un peu extrémiste sur ce point : j’aime bien lorsque quelque chose accomplit une action. Donc pour moi, un antivirus, il fait antivirus, il ne fait pas parefeu (ça c’est le parefeu). Idem, chez Divi, on ne devrait pas trouver d’optimisations des performances : Divi, c’est le constructeur de pages, la performance, c’est le plugin de cache. Les plugins SEO selon moi ne devraient pas proposer de créer de redirections, ça c’est l’excellent plugin Redirection qui s’en charge (d’ailleurs lui ne fait que ça). Et ainsi de suite.
Et comme j’aime aussi le pricipe de l’open source, je ne compte pas le rendre payant non plus ou intégrer des fonctionnalités qui ne seraient disponibles que dans une version premium. PM DB Cleaner est parti d’un besoin interne pour la maintenance des sites que je gère, et son évolution a été accélérée par l’arrivée de l’IA. Aujourd’hui, je considère qu’il est ok pour être partagé.
Le tuto est un peu trop long ? Pas de problème, c’est résumé ici :
- Une base de données WordPress accumule naturellement de la pollution avec le temps et s’alourdit
- Le nettoyage de la base de données peut s’avérer dangereux si on ne sait pas ce qu’on faut (dangereux du style « j’ai pété tout mon site »)
- notre plugin PM DB Cleaner effectue ce nettoyage de base de données pour vous, de manière fiable et automatisée
- et pour ceux qui savent ce qu’il faut nettoyer encore plus finement, PM DB Cleaner propose aussi un nettoyage plus poussé
Pourquoi nettoyer la base de données WordPress ?
Des performances améliorées
WordPress charge certaines données directement en mémoire à chaque requête – c’est le mécanisme « autoload » de la table ‘wp_options’. Quand des extensions (ou plugins) désinstallées laissent leurs options derrière eux, ou quand le cache ‘dirsize_cache’ grossit démesurément, chaque page chargée embarque des données inutiles. Réduire ce poids améliore le temps de réponse du serveur, souvent de façon mesurable.
Des sauvegardes plus légères et plus rapides
Forcément, une base de données allégée se sauvegarde plus vite et occupe moins d’espace. Sur un parc de sites, cela représente une économie significative en stockage et en temps de traitement.
Une maintenance simplifiée
Les métadonnées orphelines, les tâches cron sans callback, les options résiduelles de plugins supprimés : autant de résidus qui compliquent le diagnostic lorsqu’un problème survient. Une base propre est une base lisible. Bien entendu, ce point va vous intéresser si vous vous occupez de la maintenance de votre propre site.
Un site plus sûr
Une base de données WordPress se charge de pollution au fil du temps. Ca ne se voit pas, c’est numérique, ce n’est pas crade comme un moteur de voiture encrassé, mais ça ne signifie pas que ça n’existe pas. Les données obsolètes, les transient expirés (désolé pour les noms techniques, c’est vraiment comme ça que ça s’appelle) peuvent masquer des comportements anormaux. Les supprimer régulièrement réduit la surface d’exposition et facilite les audits de sécurité.
Qu’est-ce qui s’accumule dans une base WordPress ?
Les métadonnées orphelines
Chaque article, commentaire, catégorie ou utilisateur peut avoir des métadonnées associées (les métadonnées sont des données qui définissent l’élément parent). Quand l’élément parent est supprimé, ses métadonnées restent souvent en base, sans aucune utilité. Ces entrées orphelines peuvent représenter des milliers de lignes sur un site actif.
Les métadonnées dupliquées
Certains plugins écrivent plusieurs fois la même valeur pour la même clé et le même élément, sans vérifier si elle existe déjà. Ces doublons gonflent inutilement les tables.
Les caches oEmbed
Chaque fois que WordPress intègre une vidéo YouTube, un tweet ou tout autre contenu oEmbed, il en cache le résultat en base. Ces caches s’accumulent et deviennent obsolètes sans jamais être nettoyés automatiquement.
Les transients expirés
Les transients sont des données temporaires stockées en base avec une date d’expiration. WordPress les supprime à l’accès, mais uniquement quand quelqu’un y accède. Les transients expirés qui ne sont jamais relus restent indéfiniment en base. Ca ne fait rien, ce n’est pas dangereux, c’est juste que ça s’accumule et à terme, votre base de données pèse lourd pour pas grand chose.
Les révisions d’articles
Par défaut, WordPress conserve un nombre illimité de révisions pour chaque article. Sur un site avec beaucoup de contenu édité régulièrement, cela peut représenter plusieurs fois le volume de contenu réel. Par exemple, chez Perspectives Marketing, nous limitons à 10 le nombre de révisions par article.
Les tâches CRON orphelines
Une tâche CRON est une tâche automatisée. L’exemple le plus simple à comprendre est pour moi celui de la sauvegarde : quand on dit que la base de données est sauvegardée quotidiennement à minuit, c’est en réalité une tâche CRON qui se lance tous les jours à minuit pour exécuter le script de sauvegarde de la base de données.
Le problème : au cours de la vie d’un site, quand un plugin est désinstallé sans nettoyer ses tâches planifiées, celles-ci continuent de se déclencher indéfiniment, sans effet, mais en consommant des ressources à chaque exécution.
L’overhead des tables MySQL
Après des suppressions massives, MySQL conserve l’espace disque alloué même si les données ont disparu. C’est comme si vous enleviez des vêtements dans un placard : ils ne sont plus là mais vous ne pouvez pas récupérer l’espace de rangement. A terme, les tables de la base deviennent de plus en plus fragmentées. Cette opération (‘OPTIMIZE TABLE’ pour les techniciens) récupère cet espace et améliore les performances d’accès.
Les résidus de plugins désinstallés dans wp_options
C’est l’un des problèmes les plus fréquents et l’enfer de WordPress (selon moi) : un plugin supprimé laisse ses options de configuration en base. Vous avez changé de plugins plusieurs fois, ou de prestataires, chacun installant ses extensions fétiches sur votre site ? Il est absolument certain que la table ‘wp_options’ contient des centaines d’entrées inutiles, dont certaines continuent d’être chargées à chaque requête. Vous pouvez le vérifier facilement en allant jeter un oeil dans le back office WordPress > Outils > Santé du site
J’ai encore testé une IA en lui demandant uniquement : « nettoyage de base de données WordPress dans un style futuriste ».
J’aime bien le côté futuriste, et le cercle me rappelle presque un tambour de machine à laver, donc parfait pour le thème abordé ici.
PM DB Cleaner : le plugin de nettoyage pour WordPress
PM DB Cleaner est un plugin WordPress open source développé par nos soins. Je vais être transparent, si le code original était bien le nôtre dans ses premières versions, c’est l’IA qui m’a fait gagner du temps sur son évolution, à la fois en termes de graphisme et de fonctionnalités.
Il automatise les nettoyages récurrents et offre des outils manuels pour les interventions ponctuelles, le tout avec des garde-fous explicites pour éviter toute suppression accidentelle.
Les nettoyages automatiques
PM DB Cleaner planifie 3 tâches CRON dès son activation.
Nettoyage quotidien – Action Scheduler
Supprime les actions terminées, échouées ou annulées de plus de 7 jours dans les tables d’Action Scheduler (utilisé notamment par WooCommerce et de nombreux plugins modernes). Les logs associés aux actions supprimées sont également nettoyés.
Nettoyage hebdomadaire – Base de données
Prend en charge l’ensemble des tables de métadonnées :
- Posts : métadonnées orphelines, métadonnées dupliquées, caches oEmbed
- Commentaires : métadonnées orphelines, métadonnées dupliquées, commentaires en corbeille
- Termes & Taxonomies : métadonnées orphelines, métadonnées dupliquées, relations de taxonomie orphelines
- Utilisateurs : métadonnées orphelines et dupliquées (hors multisite)
- WooCommerce : variations de produits orphelines (si WooCommerce est actif)
Nettoyage mensuel – Commentaires et transients
- Suppression définitive des commentaires en corbeille
- Suppression des transients expirés (réguliers et site transients)
- Suppression des timeouts de transients orphelins (timeouts pointant vers un transient qui n’existe plus)
Les outils de nettoyage manuels
Cette partie est plutôt réservée aux techniciens, développeurs, aux gens qui connaissent leur chemin dans PHPMyAdmin. Certaines opérations nécessitent une décision humaine. PM DB Cleaner les regroupe dans des panneaux dédiés, avec confirmation explicite obligatoire avant toute action irréversible.
Les métadonnées ('postmeta')
La table 'wp_options'
L'autoload
Le Dirsize Cache
Supprime le cache de taille des dossiers ‘uploads’ généré par WordPress. Ce cache peut devenir très volumineux sur les sites avec beaucoup de médias. Il se recrée automatiquement à la prochaine visite de la médiathèque, sa suppression sans risque.
Overhead de base de données
Tâches Cron orphelines
Sécurité et traçabilité
Toutes les suppressions sont loguées dans ‘wp-content/uploads/pm-db-cleaner.txt’ avec horodatage, mode (AUTO ou MANUEL) et nombre d’éléments supprimés. Si vous avez une extension de sécurité installé, il y a des chances que votre dossier « uploads » soit protégé, c’e’st pourquoi j’ai choisi de le poser là-bas plutôt que dans « wp-content ». Une rotation automatique prend en charge les fichiers dépassant 5 MB.
Enfin, chaque action AJAX est protégée par nonce et vérification de capacité (‘manage_options’ pour les intimes). Les opérations de suppression sont limitées à 500 enregistrements par exécution pour prévenir les timeouts.
Installation & Utilisation
La partie facile !
- Télécharger PM DB Cleaner depuis GitHub
- Décompresser dans ‘wp-content/plugins/pm-db-cleaner/’
- Activer dans le back-office WordPress > Extensions > Activer
- Accéder au plugin dans Outils > PM DB Cleaner
Les 3 tâches CRON de nettoyage sont planifiées automatiquement à l’activation. Elles sont supprimées proprement à la désactivation.
Voilà, c’est tout pour aujourd’hui. Si l’aventure vous tente, installez-le, faites des sauvegardes, testez-le, faites-moi vos retours. En attendant, je vous souhaite un bél été et n’oubliez pas : surfez sur le web, videz le cache !
Stéphane PISKORZ
Accro à WordPress depuis 2012, j'ai tellement codé que j'ai fini par parler en HTML à mes plantes. Formé à l'art noble de la rédaction web, j'ai plongé tête la première dans le grand bain du référencement naturel et la sécurité des sites web. Quand je ne suis pas en train de sauver le monde digital, on me trouve à Pornic, guidant les entreprises locales dans le jungle du numérique avec ma boussole SEO et mon chapeau blanc d'Indiana Jones du web. Et pour le fun, je fais passer des soutenances à des étudiants en SEO, en essayant de ne pas leur poser trop de questions orchidoclastes.
