Astuces utiles pour trouver et corriger les requêtes de base de données WordPress lentes

Publié: 2019-04-17

Des requêtes SQL modérées peuvent perturber l'exécution du site de développement d'applications WordPress. De temps en temps, les requêtes modérées sont une conséquence d'un SQL insuffisamment structuré qui n'aurait jamais dû être fait de cette façon.

De plus, dans certains cas, les demandes modérées étaient, en réalité, des questions rapides à un certain point, mais à mesure que le site devenait plus expérimenté, la demande devenait de plus en plus lente, incapable de rester au courant de l'extension de la base de données.

Malgré la façon dont le SQL est devenu modéré, il convient d'étudier quelques approches pour découvrir et résoudre les questions problématiques dans le développement d'applications WordPress. Ici et là, on peut avoir besoin de certaines applications Web et ne pas avoir suffisamment d'énergie, d'aptitude ou de plan de dépenses pour effectuer des améliorations personnalisées. Créer sans aucune préparation peut être la solution à certains problèmes, mais cela peut prendre plus de temps que de commencer à partir d'une base de code actuelle. WordPress a été initialement structuré comme une étape de blogging, et il continue d'être exceptionnel pour cela. Quoi qu'il en soit, il est devenu un système de gestion de contenu (CMS) à part entière et, à quelques fins, peut même créer une application Web solide - rapidement et à un plan de dépenses fondamentalement inférieur à celui d'une amélioration personnalisée. Bien que WordPress propose des applications de développement intégrées, il peut être utilisé pour des applications Web, afin de le rendre encore plus utile. Les structures de page et de publication inhérentes peuvent être utilisées pour beaucoup de choses, mais au cas où l'on aurait besoin d'informations et de champs personnalisés à inclure, rechercher ou interroger, contrôler et afficher, un travail supplémentaire est nécessaire.

Recherche de requêtes lentes

La recherche de l'origine des questions modérées comprend deux étapes :

  1. Découvrir quelles questions sont vraiment les plus modérées.
  2. Identifier le programme qui les exploite.

Il faut jeter un coup d'œil à deux modules et un SaaS qui peuvent leur permettre de découvrir des demandes modérées.

Moniteur de requête

Pour obtenir des informations sur la page en cours d'exécution, ce module peut être utilisé. Nonobstant un ensemble complet de données sur les activités internes de WordPress, il donne une ventilation point par point de :

  • Combien de questions se sont posées sur cette demande ?
  • Quelle demande sur la page a pris le maximum de temps ?
  • Quelles capacités ont investi le plus d'énergie dans les questions SQL ?
  • Que ces demandes proviennent de modules, de sujets ou du centre WordPress

L'écran d'enquête reconnaît même les questions modérées avec un contenu rouge énervant, ce qui rend très simple la sélection du problème SQL.

Barre de débogage

Un autre instrument phénoménal pour trouver du SQL glacialement modéré est l'ancien et fidèle module Debug Bar. La barre de débogage fournit des données sur le fonctionnement interne de WordPress lorsqu'une page est chargée avec des éléments tels que :

  1. Paramètres de WP_Query
  2. Demander des données (compter la coordination des règles de refonte)
  3. Requêtes SQL produites par la présente page

Pour activer le suivi SQL dans la barre de débogage, l'utilisateur doit veiller à autoriser SAVEQUERIES quelque part sur le site, probablement dans wp-config.php

Attention : SAVEQUERIES affecte l'exécution sur le site et ne devrait probablement pas être utilisé sur un serveur de génération. Cependant, il peut être utilisé sur une machine d'avancement.

Trouver le SQL modéré n'est pas extrêmement facile avec la barre de débogage. Par exemple, il ne donne pas les tableaux triables ou ne propose pas de demandes modérées pour l'utilisateur. Ce que Debug Bar fournit est une capacité de suivi qui oriente précisément l'utilisateur vers la direction d'origine d'une question.

Il s'agit d'un aperçu des documents qui sont chargés et des capacités qui résultent de l'enquête en cours d'exécution. Plus souvent qu'autrement, on aime la section continue absolue sur le récapitulatif; c'est l'endroit où la question modérée a été exécutée et où il faut commencer sa chasse. L'avantage d'avoir le paramètre de chaque capacité qui soulève cette question est qu'il peut révéler un aperçu de la raison pour laquelle le SQL a été exécuté dans tous les cas.

NouvelleRelique

NewRelic est une administration qui mesure et contrôle l'exécution du développement d'applications Web, y compris le développement d'applications WordPress. L'administration donne une tonne de données sur l'exécution du site. Il est tout sauf difficile de perdre tout sens de l'orientation dans les informations que NewRelic donne à l'utilisateur chaque minute des détails pour les requêtes SQL.

Il existe deux contrastes notables entre NewRelic et les modules auxquels nous avons fait référence précédemment :

  1. NewRelic donne beaucoup plus d'informations sur l'exécution du PHP, jusqu'au calcul exact du temps passé dans chaque fonction
  2. NewRelic suit chaque demande vers le site à l'abri des regards, de sorte que l'on peut y faire référence plus tard pour découvrir un SQL modéré. Les modules lui donnent juste la page actuelle.

Il est important que NewRelic ait un niveau d'arrangement gratuit qui donne des informations générales sur l'exécution du site, mais il faudra passer à un arrangement payant pour les bric-à-brac fantaisistes pour vérifier les demandes singulières et trouver des demandes modérées.

Comprendre une requête lente avec EXPLAIN

Jusqu'à présent, les appareils ont été sécurisés pour trouver des questions modérées. À l'heure actuelle, il faudrait savoir pourquoi ces enquêtes entravent les choses.

Le mot d'ordre MySQL EXPLAIN peut permettre, euh, de clarifier ce qui se passe. Ajouter EXPLAIN au début d'une requête indique comment MySQL exécute une question. Pour les requêtes alambiquées, EXPLAIN peut aider à distinguer les focus modérés dans les SQL, par exemple, les sous-requêtes modérées ou les activités inutiles.

Correction des requêtes lentes

Puisqu'il est réalisé que les requêtes sont modérées et qu'EXPLAIN a révélé à l'utilisateur pourquoi il en est ainsi, il convient de jeter un coup d'œil à quelques choix pour résoudre ces problèmes de somnolence.

Option 1 : Déformer la question

Il peut y avoir une question qui met l'écran de Edit Post à un rythme très lent. La demande était un élément de la méta-boîte des champs personnalisés.

Le morceau défini de SQL apporte une liste meta_keys de la table ks29so_postmeta qui, selon toute probabilité, ne commence pas par le signe du trait de soulignement. L'explication GROUP BY implique que chaque résultat est spécial.

En exécutant cette enquête plusieurs fois, voici le temps que cela peut prendre :

1,7145 s

1,7911 s

1,8076 s

1,7707 s

1,8456 s

On pourrait développer une requête qui aboutit à des sorties similaires. Il doit être choisi comme une méta_clé unique en son genre. Exceptionnel est un mot équivalent pour particulier, qui se trouve être une explication SQL !

Option 2 : Ajouter un index

Pendant que l'utilisateur exécute une question SQL sur une table MySQL définie, il doit examiner l'ensemble de la table pour comprendre quelles sont les lignes qui sont importantes pour la requête particulière. Au moment où la table devient énorme, cette vérification commence à prendre un certain temps.

C'est là que les enregistrements MySQL entrent en jeu. Les listes prennent les informations dans un tableau et les organisent de manière à rendre les informations beaucoup moins difficiles à trouver. En triant les informations d'une manière spécifique, les fichiers aident à réduire la mesure de filtrage que MySQL accomplit pour chaque requête.

Les fichiers peuvent être ajoutés à des segments uniques ou sur différentes sections.

Avec un fichier sur meta_key, la toute première heure des questions SQL ressemble un peu à ceci :

0,0041 s

0,0023 s

0,0030 s

0,0025 s

0,0019 s

C'est extrêmement intelligent.

Une expression d'alerte sur les fichiers : chaque fois que INSERT crée une colonne ou que UPDATE est utilisé sur une table, la liste est redéterminée, ce qui peut être une activité coûteuse. Les enregistrements accélèrent la lecture à partir de la table, mais l'écriture est plus lente. Bien qu'une liste d'index correctement placée puisse fonctionner extrêmement bien, il ne faut pas en être obsédé sans vérifier les impacts généraux de la liste sur la base de données.

Option 3 : mettre en cache les résultats de la requête

Une fois qu'on se rend compte qu'il y a une question modérée. Plutôt que de changer la question, il peut y avoir un scénario dans lequel il suffit de mettre de côté les séquelles de l'enquête. De cette façon, on limiterait la régularité de l'enquête et on obtiendrait un « laissez-passer gratuit » le plus souvent.

L'API WordPress Transients est l'un des moyens de réserver les requêtes. Les transitoires sont utilisés pour mettre de côté les conséquences de tâches coûteuses, par exemple,

  • Demandes à des sites externes (par exemple, obtenir des messages Facebook en cours)
  • Manipulations lentes (par exemple en cherchant des cordes énormes avec une articulation habituelle)
  • Enquêtes lentes sur la base de données !
Choisir une approche

Il existe un certain nombre d'alternatives qui ont été présentées, et il y a très probablement dix-sept approches différentes pour comprendre cette enquête modérée. Quelle approche faut-il adopter ?

Le choix 1 (changer la question) a donné des résultats brillants. Cependant, il faut envisager la possibilité que l'enquête modifiée n'ait généralement pas des résultats similaires. On pourrait, sans le vouloir, embrouiller le code avec une question quelque peu décalée.

L'option 2 (y compris un enregistrement) n'est pas toujours envisageable en fonction du tableau et des sections utilisées par l'enquête. En raison des tableaux du centre de développement d'applications WordPress, il faudrait insister sur les autres effets des enregistrements :

  • La routine de rafraîchissement du centre attend-elle des listes supplémentaires ?
  • L'inclusion d'un fichier modérera-t-elle différentes demandes, comme INSERT et UPDATE ?

L'alternative 3 (réserver les résultats au moyen des personnes sans domicile) a un effet insignifiant - l'utilisateur n'a pas besoin de modifier la première requête et il n'est pas nécessaire d'ajuster la structure de la base de données.

Habituellement, les gens optent pour l'option 3. Dans son cas spécifique, il peut choisir une autre alternative en fonction de la question qu'il résout ou du site spécifique ayant des problèmes SQL. Il n'y a certainement pas de réponse unique à la plupart des problèmes d'exécution, donc on est autorisé à différer de la décision de l'autre - ou, essayez chacun des trois sans un instant de retard !

Rester à jour

Il a esquissé un véritable problème ici. La boîte de champs personnalisés sur CSS-Tricks était vraiment un contrevenant pour certaines demandes de base de données extrêmement modérées. Il a également esquissé diverses voies vers des arrangements potentiels.

Concevoir de nouvelles idées

Il existe différentes méthodologies que l'on peut adopter pour tenter d'accélérer l'exécution des questions qui impliquent plus de travail que de simplement peaufiner l'enquête ou d'inclure une liste. L'une des parties les plus lentes de la question est le travail effectué pour joindre les tables pour passer de l'identifiant client à l'identifiant de l'élément, et il faut le faire pour chaque client.

On pourrait dénormaliser les informations en créant une table qui stocke les informations de permis, à côté de l'identifiant client et de l'identifiant de l'article pour toutes les licences et simplement en faisant une demande par rapport à cela pour un client particulier. Il faudrait modifier la table en utilisant les déclencheurs MySQL sur INSERT/UPDATE/DELETE vers la table des licences (ou d'autres en fonction de la façon dont les informations pourraient changer), mais cela améliorerait considérablement l'exécution de l'interrogation de ces informations.

Ainsi, si plusieurs jointures modèrent la question dans MySQL, il peut être plus rapide de diviser l'enquête en au moins deux articulations et de les exécuter indépendamment dans PHP, puis de rassembler et de canaliser les résultats dans le code.