Combien de lignes une table peut-elle accumuler avant que quelqu’un ne s’en inquiète ? Sur un site utilisant intensivement des gabarits personnalisés depuis la sortie de l’éditeur de site stable, la réponse a fini par tenir en un chiffre inconfortable : plusieurs centaines de milliers de lignes dans wp_postmeta, pour un site qui ne compte pourtant qu’une quarantaine de gabarits actifs.
Ce billet s’adresse à un développeur qui diagnostique un ralentissement lié au volume de métadonnées liées à des gabarits personnalisés. Il ne traite pas de l’indexation MySQL en elle-même, un sujet distinct qui mériterait son propre développement.
Un ralentissement diffus, pas un incident ponctuel
Le symptôme n’a rien de spectaculaire : pas d’erreur, pas de page blanche, simplement un temps de réponse qui se dégrade progressivement sur l’écran d’administration des gabarits, particulièrement sensible lors de l’ouverture de l’éditeur de site. Ce type de ralentissement diffus est notoirement plus difficile à diagnostiquer qu’une panne franche.
Isoler la table en cause
La commande WP-CLI suivante donne un premier ordre de grandeur, table par table :
wp db size --tables --format=table
Sur le site concerné, cette commande révèle une table wp_postmeta disproportionnée par rapport au nombre d’articles et de gabarits déclarés. Un comptage plus précis confirme la piste :
wp db query "SELECT meta_key, COUNT(*) AS total FROM wp_postmeta GROUP BY meta_key ORDER BY total DESC LIMIT 10;"
Ce qui explique un tel volume
L’origine se trouve dans une extension tierce qui enregistre, pour chaque variation de style appliquée à un bloc dans un gabarit, une métadonnée dédiée sur l’article correspondant — y compris pour des variations testées puis abandonnées, jamais nettoyées après coup. Chaque essai laisse une trace, jamais supprimée automatiquement.
- Une métadonnée par variation testée, même celles jamais conservées dans la version finale du gabarit.
- Aucun mécanisme de purge automatique prévu par l’extension concernée.
- Un nombre de lignes qui grossit avec l’activité d’édition, indépendamment du nombre réel de gabarits actifs.
Mesurer avant d’agir

Avant toute suppression, un audit précis distingue les métadonnées réellement utilisées par un gabarit actif de celles devenues orphelines, rattachées à des révisions ou des brouillons abandonnés depuis longtemps :
wp db query "
SELECT COUNT(*) FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;
"
Cette requête compte les métadonnées orphelines, rattachées à des identifiants d’articles qui n’existent plus. Sur le site étudié, ce nombre représentait à lui seul plus du tiers du volume total de la table.
Nettoyer sans précipitation
La suppression de métadonnées orphelines reste une opération sensible, à réaliser après une sauvegarde complète de la base de données. Une commande WP-CLI dédiée, exécutée d’abord en mode simulation, permet de vérifier l’ampleur du nettoyage avant de l’appliquer réellement.
Un nettoyage de base de données sans sauvegarde préalable n’est pas un nettoyage, c’est un pari — et un pari qui finit rarement bien le jour où l’on en a le plus besoin.
Après nettoyage, le temps d’exécution d’un export complet de la base de données, mesuré avant et après l’opération, est passé de plus d’une minute à une trentaine de secondes — un gain net directement attribuable à la réduction du volume de la table concernée.
Prévenir la récidive
Une fois la cause identifiée, il devient possible d’agir en amont : désactiver la génération systématique de métadonnées pour les variations non conservées, ou planifier un nettoyage périodique des métadonnées orphelines via une tâche automatisée, plutôt que d’attendre qu’un ralentissement diffus ne redevienne perceptible.
En résumé
Un ralentissement diffus lié aux gabarits ne vient pas toujours du code d’affichage, mais parfois d’une accumulation silencieuse de métadonnées orphelines dans wp_postmeta. Un audit ciblé, suivi d’un nettoyage prudent et sauvegardé, suffit souvent à retrouver des temps de réponse normaux, sans toucher au moindre gabarit.