web-dev-qa-db-fra.com

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

J'ai un site WordPress avec plus de 8 000 messages et chaque fois que j'en ajoute un nouveau, le site ne répond plus. J'ai consulté le journal des requêtes lentes de MySQL et découvert qu'il effectuait une sélection qui renvoyait la plupart des lignes de la table posts et qu'il prenait beaucoup de temps à s'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?

8
holiveira

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 faite et le temps nécessaire pour terminer la requête et le temps nécessaire pour créer la page entière.

4
Sisir

Ce que vous voudrez peut-être faire, c'est exécuter une requête EXPLAIN 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 utilisé par MySQL collecte les données dont vous avez besoin.

Cependant, en regardant simplement les clauses WHERE et ORDER BY, je voudrais faire la suggestion suivante: créer un index pouvant aider la requête à accélérer. Puisque post_status et post_type ont des valeurs statiques dans la requête et que 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 !!!

2
RolandoMySQLDBA

Ce problème est lié au plugin Google XML Sitemaps. http://wordpress.org/support/topic/plugin-google-xml-sitemaps-performance-issues-on-large-wp_posts-tables

Vous pouvez utiliser l'option "Activer la construction manuelle du plan du site via une requête GET". Et déclencher la progression de la génération manuellement.

1

Essayez le plug-in suivant, Query Interface , qui vous permettra d’afficher les requêtes et de vous donner une interface où vous pourrez également vérifier ce que la requête prend en vérifiant ses index ou ses explications.

0
Zeeshan Khan