Performances et surveillance
Diagnostiquer les requêtes LEFT JOIN lentes dans WordPress
Sur de grandes installations, une requête de WordPress qui filtre par catégories ou taxonomies peut prendre beaucoup de temps en combinant posts et term_relationships, en triant et en limitant les résultats. La présence de LEFT JOIN ne prouve pas à elle seule que la requête est mauvaise : les données, les filtres, les index et le plan d'exécution comptent.
Contexte du cas historique
Ce guide est né d'incidents avec des centaines de milliers d'articles et renvoie au ticket 54346 de WordPress, où sont étudiées les requêtes de catégories et des alternatives avec sous-requêtes.
Les résultats observés sur certaines installations ne garantissent pas des temps de quelques millisecondes pour n'importe quel volume de données. Ils ne font pas non plus d'un correctif du ticket une correction officielle applicable à toutes les versions.
Identifier la requête réelle
- Reproduisez une URL lente et notez s'il y avait une session, du cache et des filtres.
- Utilisez PHP X-Ray pour repérer la requête complète et le composant qui la génère.
- Notez les versions de WordPress, de MySQL ou MariaDB et des extensions concernées.
- Sur une copie avec des données représentatives, examinez le plan avec
EXPLAINet les index existants.
Comparez le nombre de lignes examinées, l'endroit où se fait le filtrage et la manière dont le tri est effectué. Un plan différent après une mise à jour mérite une analyse, mais il n'identifie pas automatiquement un seul coupable.
Évaluer une alternative
Le développeur peut tester une sous-requête, une expression équivalente, un index ou une autre façon d'utiliser WP_Query. Vérifiez qu'elle conserve les mêmes articles, le même tri, les mêmes exclusions, les doublons et la pagination, surtout avec des combinaisons de taxonomies.
Ne remplacez pas tous les JOIN et ne supprimez pas GROUP BY de façon globale. Une modification qui accélère une catégorie peut renvoyer des résultats incorrects dans une autre requête.
Appliquer et maintenir
Évitez de modifier directement les fichiers du cœur : les mises à jour écrasent les modifications et un ancien correctif peut ne plus s'appliquer. Si une adaptation temporaire est indispensable, le développeur doit la maintenir avec un contrôle de version, des tests et un moyen de la retirer.
Après la modification, comparez plusieurs exécutions et vérifiez les catégories, les recherches, la pagination et l'administration. Gardez le plan précédent et revenez en arrière si d'autres opérations se dégradent. Pour les requêtes qui calculent aussi des totaux, consultez le guide de SQL_CALC_FOUND_ROWS.
Cela peut aussi vous aider
- Améliorer les performances de la base de données de WordPress avec Index WP MySQL For Speed Évaluez les index de WordPress avec Index WP MySQL For Speed, vérifiez les modifications avant de le...
- Requêtes SQL lentes de type « SELECT SQL_CALC_FOUND_ROWS » Diagnostiquez les requêtes lentes de WordPress avec SQL_CALC_FOUND_ROWS, identifiez leur origine et...
- Requêtes SQL pour nettoyer les données orphelines et purger la base de données de WordPress Nettoyez les données orphelines, les révisions et les transients de WordPress avec des requêtes véri...
- Accélérer et optimiser WordPress et WooCommerce étape par étape Optimisez WordPress et WooCommerce étape par étape en vérifiant PHP, le cron, LiteSpeed Cache, les i...
Quelque chose cloche ou a changé ? Racontez-nous et nous le vérifions.