Comment puis-je trouver la source des requêtes lentes dans Wordpress?


7

J'ai un site WordPress avec plus de 8000 messages et chaque fois que j'en ajoute un nouveau, le site ne répond plus. J'ai vérifié le journal des requêtes lentes de MySQL et j'ai découvert qu'il effectue une sélection qui renvoie la plupart des lignes de la table des publications et prend beaucoup de temps à exécuter.

Ceci est un exemple:

Query_time: 149.702704  
Lock_time: 0.000078  
Rows_sent: 4699  
Rows_examined: 9398  
Rows_affected: 0  
Rows_read: 4699
use 488726_wp;

SELECT `ID`, `post_author`, `post_date`, `post_date_gmt`, `post_status`, `post_name`, `post_modified`, `post_modified_gmt`, `post_parent`, `post_type`
    FROM `wp_posts` 
        WHERE ( (post_status = 'publish' AND (post_type = 'post' OR post_type = ''))  
            OR  (post_status = 'publish' AND post_type = 'page') )  
        AND post_password='' 
        ORDER BY post_modified DESC;

Comment puis-je trouver la source de ces requêtes?

Réponses:


4

Essayez d'utiliser ce plugin http://wordpress.org/extend/plugins/debug-queries/ pour vérifier les performances de vos requêtes de base de données. Il montre beaucoup de détails sur chaque requête effectuée et le temps nécessaire à la requête et le temps nécessaire pour créer la page entière.


le plugin affiche également Call From qui pourrait vous faire comprendre d'où la requête est effectuée.
Sisir

2

Ce que vous voudrez peut-être faire, c'est effectuer un EXPLAIN sur la requête comme ceci:

EXPLAIN SELECT ID, post_author, post_date,
post_date_gmt, post_status, post_name,
post_modified, post_modified_gmt, post_parent,
post_type FROM wp_posts
WHERE ( (post_status = 'publish' AND (post_type = 'post' OR post_type = ''))
OR (post_status = 'publish' AND post_type = 'page') )
AND post_password='' ORDER BY post_modified DESC;

Cela révèlera que le modèle d'accès pris par MySQL collecte les données dont vous avez besoin.

Cependant, juste en regardant les clauses WHERE et ORDER BY, je voudrais faire la suggestion suivante: créer un index qui peut accélérer la requête. Puisque post_status et post_type ont des valeurs statiques dans la requête et post_modified présente un ordre de tri pour ces deux colonnes, essayez cet index s'il vous plaît:

ALTER TABLE wp_posts ADD INDEX (post_status,post_type,post_modified);

Essaie !!!



0

Essayez le plugin suivant, Query Interface , qui vous permettra d'afficher les requêtes ainsi que de vous donner une interface où vous pouvez également vérifier ce que la requête prend en vérifiant ses index ou explication.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.