WordPress: Optimiser la base de données

La base de données constitue un facteur non négligeable des performances des blogs sous WordPress. Comme pour toute application, des maintenances régulières sont nécessaires. J’ai voulu faire un point sur le sujet, en analysant d’une part, les techniques et les constraintes d’optimisation, et en regardant, d’autre part, les solutions existantes.

Les facteurs de performances

Plusieurs éléments nuisent aux performances d’une base de données.

Critères structurels:

  • Nombre de tables,
  • Taille des tables,
  • Présence et positionnement des index.

Critères de fonctionnement:

  • Taux de croissance de la base,
  • La fragmentation: lorque l’on efface un enregistrement, celui-ci n’est pas réellement effacé, mais marqué comme effacé. Lors d’une requête INSERT, la base réutilisera ces trous pour y placer les nouveaux enregistrements. Au fil du temps cependant, les trous se multiplient, la taille des tables n’est plus en rapport avec la taille des données qu’elles hébergent,
  • L’indexation: les index sont-ils à jour, sont-ils correctement structurés?

Les bases de données fournissent en général les commandes nécessaires à la correction des deux derniers points. Nous y reviendrons.

Critères liés au fonctionnement de WordPress:

  • Le versionning des articles: toutes les versions des articles sont stockées dans la table des articles (wp_posts). Si vous ne limitez pas le nombre de ces versions, et si vous travaillez directement dans WordPress, vous pouvez très rapidement avoir plusieurs dizaines de versions par articles. La table wp_posts peut vite devenir disproportionnée,
  • Les commentaires refusés (SPAM ou autres) restent stockés dans la base wp_comments. Ils sont inutiles, et encombrants,
  • Le fonctionnement de WordPress ! L’application stockent dans certaines tables, des informations « de travail », qui ne lui sont plus utiles ensuite. Au bout d’un certain temps, ces informations qui ne sont pas effacées, deviennent relativement nombreuses, et alourdissent les tables,
  • Les plugins « polluent » également la base de données, de deux façons:
    • Ils créent des enregistrements supplémentaires dans la table wp_options,
    • Ils créent des tables supplémentaires dans la base.

    Ces informations ne sont pas effacées lors de la désinstallation des plugins, et restent dans la base.

Tous ces points font globalement grossir les tables au-delà du réel besoin.

J’ajouterais un critère supplémentaire qui est la qualité des requêtes, mais je ne permettrais pas de juger le travail effectué par les développeurs de WordPress.

Les solutions existantes

Les extensions ne sont finalement pas très nombreuses, et elles offrent toutes globalement les mêmes fonctionnalités:

  • Affichage du status des tables (requête SHOW TABLE STATUS),
  • Utilisation de la requête OPTIMIZE sur chaque table, pour réduire la fragmentation.

Les deux extensions les plus couramment rencontrées sont:

  • WP-DBManager permet à la fois de lancer des optimisations et de faire des sauvegardes de la base,
  • Optmize DB propose simplement d’optimiser les tables de la base.

Sans installer ce type d’extension, vous pouvez parfaitement effectuer ces opérations via votre outil d’administration de base (souvent PHPMyAdmin), en utilisant la commande OPTIMIZE.

L’extension Clean options permet d’effacer les options « orphelines », c’est-à-dire celles qui ne correspondent à aucune extension installée.

Personnellement j’utilise l’extension WP-DBManager, parce qu’elle propose, à la fois l’optimisation, et la sauvegarde.

Conclusion

Les performances d’une base sont liées à de multiples facteurs. Les outils standards nous permettent d’agir sur la fragmentation. Dans un prochain, je vous proposerai d’étudier les façons de limiter la croissance de la base en la « nettoyant » des informations inutiles.

1 thought on “WordPress: Optimiser la base de données”

Laisser un commentaire

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