Come posso trovare la fonte delle query lente in Wordpress?


7

Ho un sito WordPress con più di 8000 post e ogni volta che ne aggiungo uno nuovo il sito non risponde. Ho controllato il registro delle query lente di MySQL e ho scoperto che sta eseguendo una selezione che restituisce la maggior parte delle righe nella tabella dei messaggi e impiega molto tempo per essere eseguita.

Questo è un esempio:

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;

Come posso trovare l'origine di queste query?

Risposte:


4

Prova a utilizzare questo plug-in http://wordpress.org/extend/plugins/debug-queries/ per verificare le prestazioni delle query del database. Mostra un sacco di dettagli su ogni singola query effettuata e il tempo necessario per il completamento della query e il tempo necessario per rendere l'intera pagina.


il plugin mostra anche Call From che potrebbe farti capire da dove viene eseguita la query.
Sisir,

2

Quello che potresti voler fare è eseguire un EXPLAIN sulla query in questo modo:

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;

Ciò rivelerà che il modello di accesso adottato da MySQL sta raccogliendo i dati necessari.

Tuttavia, solo fissando le clausole WHERE e ORDER BY, vorrei dare il seguente suggerimento: creare un indice che può aiutare ad accelerare la query. Poiché post_status e post_type hanno valori statici nella query e post_modified presentano un ordinamento per quelle due colonne, prova questo indice per favore:

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

Provaci !!!



0

Prova il seguente plug-in, Interfaccia query , che ti consentirà di mostrare le query e ti fornirà un'interfaccia in cui puoi anche verificare che cosa sta eseguendo la query controllandone gli indici o la spiegazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.