Optimiser la table wp_postmeta de WordPress avec un index

WordPress, c’est vraiment un outil formidable. C’est bien pour cela que c’est aujourd’hui le CMS numéro 1 qui est largement devant tout les autres. C’est facile d’installer WordPress et si on s’en occupe bien en n’installant pas n’importe quoi et en faisant régulièrement les mises à jour, ça roule bien. Que ce soit pour les débutants ou les utilisateurs expérimentés, on peut dire que ça fait globalement bien le travail.

Bon forcément tout n’est pas toujours tout rose et WordPress est bien connu pour ça. Vu que c’est très accessible, cela permet à n’importe qui de l’utiliser et donc potentiellement de faire des choses pas forcément dans les règles de l’art. Attention, je ne dis pas que ce n’est pas bien. C’est même une très bonne chose que tout le monde puisse s’y mettre et c’est un bon point de départ pour se lancer. Surtout si on veut se lancer pour partager du contenu sur Internet, c’est une très bonne porte d’entrée ! Si cela vous tente, je vous invite à vous lancer sans hésitations, c’est une formidable aventure.

Cependant, quand on m’appelle pour de l’aide, il est souvent un peu tard et le poids des années peu être un peu dur à rattraper. Dans ce tutoriel, on va parler d’un WordPress qui est malheureusement devenu lent au fil des années. C’était même extrêmement lent avec des pages qui mettaient plusieurs secondes à s’afficher. Pas très agréable pour les utilisateurs et pour Google. Cela ne risque pas d’améliorer vos performances SEO sur les moteurs de recherche en général …

Le site qui m’a donné l’idée de cet article est site sous WordPress qui a plusieurs années et pèse au total un peu plus de 70 Go images comprises. Un beau bébé avec plusieurs milliers d’articles. Pour résoudre ce problème de performance, j’ai commencé par les choses classiques pour améliorer la vitesse de WordPress. C’est la première chose à faire. En général, c’est suffisant. Par expérience, c’est souvent une extension qui pose problème et plombe les performances (après une mauvaise mise à jour ou par manque d’optimisation dans son développement). Mais le problème peut se trouver ailleurs et dans mon cas, il a donc fallu pousser les investigations plus loin.

Trouver et identifier la cause des ralentissements

Dans un premier temps, il faut avoir un poids de départ pour savoir ce qui cloche sur ce serveur web avec son WordPress. Je lance donc mon outil favori pour ça sous Linux Ubuntu, il s’agit de htop. Je remarque tout de suite que la charge sur la base de données est très importante par rapport au reste :

Partant de cette observation je décide donc d’aller voir ce qu’il se passe du côté de la base de données. J’avais déjà écrit un article pour un autre problème de performance chez un autre client qui m’avait demandé de l’aide. Pour y voir plus clair, je lance donc la commande SHOW FULL PROCESSLIST qui me donne tout de suite la raison des ralentissements sur le site.

Il y a la même requête partout qui concerne la table wp_postmeta de WordPress et qui s’empile au fur et à mesure en attendant d’être traité. Je précise que le site avait énormément de trafic à ce moment-là (plusieurs centaines de personnes en simultané). Les optimisations sur le serveur web NGINX ont déjà été faites depuis longtemps, je vais donc m’intéresser à la partie base de données. Cette cette table de wp_postmeta de WordPress qui semble clairement plomber les performances et ralentir le site.

Après quelques recherches infructueuses au début, j’ai fini par trouver la solution. Je partage à mon tour dans notre langue préférée pour en faire profiter le plus grand nombre. La solution que j’ai trouvé pour résoudre ce problème de performance dans WordPress avec la table wp_postmeta, c’est de modifier cette table de la façon suivante :

ALTER TABLE wp_postmeta 
DROP KEY meta_key,
ADD KEY meta_key (meta_key, meta_value(64), post_id);

Quelques explications s’imposent avant de conclure cet article. L’optimisation de la base de données est cruciale pour maintenir la performance dans le temps d’un site WordPress, surtout à mesure que la quantité de données stockées augmente. L’une des tables les plus importantes dans WordPress est la table wp_postmeta, qui stocke toutes les métadonnées associées aux posts, telles que les champs personnalisés et autres informations supplémentaires.

Avec le temps, cette table peut devenir très volumineuse et ralentir considérablement les performances du site. Pour pallier ce problème, il est souvent nécessaire d’optimiser les index de la table. Cette commande permet de restructurer un index déjà existant. Initialement, la table pouvait avoir un index simple sur la colonne meta_key, ce qui facilitait les recherches basées sur cette colonne. Cependant, en supprimant cet index et en le remplaçant par un nouvel index composite incluant meta_key, les 64 premiers caractères de meta_value, et post_id, on améliore significativement la vitesse des requêtes complexes.

Cela permet à WordPress de traiter plus efficacement les requêtes qui filtrent ou trient les données sur ces colonnes, contribuant ainsi à un chargement plus rapide des pages et à une meilleure expérience utilisateur. Optimiser les index de la base de données n’est pas simplement une bonne pratique, c’est une étape essentielle pour maintenir la scalabilité et la réactivité de votre site WordPress à long terme.

Après avoir exécuté cette requête SQL, qui peut prendre du temps donc prenez vos précautions, les performances sont totalement revenues à la normale. Le site est même devenu encore plus rapide qu’avant. Si vous rencontre le même problème, c’est donc une solution à tenter et j’espère que cela résoudra le problème de votre côté !

Laisser un commentaire