WordPress: Nettoyer la base de données

Je vous ai présenté dans un précédent article, les facteurs de performance de la base de données de WordPress. Je vous propose de continuer l’étude, en regardant cette fois, comment nettoyer régulièrement la base de données.

L’objectif ici est de réduire la croissance de la base de données, en effaçant les informations inutiles.
Au fil de son utilisation, WordPress et ses plugins génèrent en effet des données temporaires qui ne sont plus utilisées par la suite, mais qui ne sont malheureusement pas supprimées de la base.

Les requêtes proposées dans cet article ne sont pas anodines. Une erreur de frappe pouvant avoir de lourdes conséquences, je vous conseille de faire une sauvegarde de votre base de données préalablement à toutes opérations.

Toutes les opérations proposées dans cette article nécessitent d’avoir un accès direct à la base de données. Votre hébergeur dispose certainement d’un outil pour cela, l’outil le plus répandu étant phpmyadmin.

Suppression des versions

La gestion de versions est certainement la fonction la plus génératrice de données (en volume).
Typiquement, garder les versions des articles en cours de rédaction, est très intéressant. Pour les articles déjà publiés, l’intérêt est beaucoup moins grand. La requête suivante efface les versions des documents (voir le site de Lester Chan):

DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'

Vous pouvez effectuer une action « préventive », en limitant le nombre de versions par article. Il faut pour cela, ajouter la ligne suivante dans le fichier wp-config.php:

define('WP_POST_REVISIONS', un chiffre); /* 0 désactive le versionning */

Exemple:

define('WP_POST_REVISIONS', 2);

Suppression des options du type rss_…

Les informations affichées dans le tableau de bord de l’interface d’administration sont des flux RSS, dont les données sont stockées dans la table wp_options. Ces informations ne sont pas toujours effacées, et deviennent parfois envahissantes.

Si les options du type rss_ … deviennent trop nombreuses, elles font grossir inutilement la tables des options. Il est possible de les effacer régulièrement, avec la requêtes suivantes:

DELETE FROM wp_options WHERE option_name LIKE 'RSS_%'

Si vous vous connectez immédiatement après à l’interface d’administration, les tableaux d’information seront d’abord vides, puis se rempliront de nouveau avec les dernières entrées.

Suppression des données du type _last_edit

WordPress peut être utilisé par plusieurs auteurs simultanément. Pour éviter que des articles soient édités en même temps, et provoquer ainsi des pertes de données, l’application pose des verrous sur les articles. Ces verrous prennent la forme de deux valeurs _edit_last et _edit_lock dans la table wp_postmeta. Le problème est que ces valeurs ne sont pas effacées après utilisation.

Si vous êtes le seul auteur de votre blog, ces informations sont inutiles est peuvent être supprimées régulièrement avec la requête suivante:

DELETE a FROM wp_postmeta a WHERE a.meta_key = '_edit_last' OR a.meta_key = '_edit_lock'

Suppression des commentaires refusés

Autre source d’informations inutiles: les spam, et les commentaires refusés. Ces commentaires restent en effet stockés dans la base de données, alors qu’à priori, nous ne les utiliserons plus.

Deux solutions possibles: Utiliser l’option d’Akismet, ou effacer directement les commentaires dans la base.

Akismet propose une option permettant d’effacer systématiquement les commentaires indésirables dans les articles datant de plus de 1 mois. Il faut juste, pour cela, cocher une option dans l’écran de configuration.

Page de configuration Akismet
Page de configuration Akismet

Pour effacer les commentaires indésirables, directement dans la base, il sufit d’appliquer régulièrement la requête suivante:

DELETE FROM wp_comments WHERE comment_approved = ’spam’;

Attention, cette opération va irrémédiablement supprimer les statistiques de Akismet, puisque nous supprimons la source d’information lui permettant de calculer ces statistiques.

Personnellement, j’utilise l’option d’Akismet, simplement parce qu’elle est automatique.

Et les extensions

Les opérations précédentes nous permettent de nettoyer les informations liées au fonctionnement de WordPress lui-même.  Il reste à traiter le cas des données ou des tables, créées par les plugins, des widgets ou des thèmes lors de leur installation, et non effacées par la suite.

Malheureusement, il n’existe pas, à ma connaissance, d’outil capable de gérer correctement ce type de pollution. Le plugin Clean-options apporte un début de réponse, en essayant de nettoyer la tables wp-options.

La méthode manuelle permettant de contrôler ce que génère ces extensions, est de comparer la liste des tables, ainsi que la liste des options, avant, puis après avoir installer chaque extension.

Démarche globale

Si vous souhaitez nettoyer votre base de données WordPress, je vous conseille la démarche suivante:

  1. Backup complet de la base de données avec un outil comme WP-DB-Backup ou WP-DBManager
  2. Execution des requêtes présentées dans le paragraphe précédent,
  3. Optimisation de la base avec un plugin comme WP-DBManager.

Sauf si vous avez une activité forte sur votre blog, ou beaucoup de commentaires, il est inutile d’effectuer l’opération plus d’une fois par mois.

Conclusion

WordPress est certainement une des meilleures plateformes de blog, mais elle n’est exempt de défaut. L’effacement des données qui ne sont plus utilisées en fait partie. Quelques points évoluent positivement: la version 2.7 apporte des fonctionnalités pour la désinstallation propre des extensions par exemple. Fonction intéressante, à condition que les développeurs de plugins l’utilisent correctement. Pour le reste, des opérations directes sur la base de données sont encore nécessaires, et deviennent indispensables sur les « gros » sites, pour éviter les dérives trop importantes des performances.

5 thoughts on “WordPress: Nettoyer la base de données”

  1. Oui, Akismet fait le menage automatiquement, en effacant les spams les plus anciens.

    Concernant les plugins, j’en ai teste quelques uns sans etre reellement convaincu de leur efficacite:
    Clean-options
    delete-revision
    options-manager
    Clean-up WordPress
    Dans tous les cas, il faut, soit les essayer en local avant de les passer « en production », et/ou faire une sauvegarde de la base avant de lancer les phases de nettoyage.

  2. Bonjour

    si j’ai bien compris le passage sur Akismet, je coche la case et ca permet d’enlever automatiquement les spam ou commentaires indésirables de la bdd ?
    Au détriment des stats mais comme je n’en ai pas une grande utilité…

    Sinon, il n’y a pas un plugin actuellement pour nettoyer la bdd des anciennes versions, des multiples sauvegardes d’articles… ?

    car je maîtrise pas bien le reste

    Olivier

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *