Wie finde ich die Quelle langsamer Abfragen in Wordpress?

7

Ich habe eine WordPress-Site mit mehr als 8000 Posts und jedes Mal, wenn ich eine neue hinzufüge, reagiert die Site nicht mehr. Ich habe das MySQL-Protokoll für langsame Abfragen überprüft und festgestellt, dass es eine Auswahl ausführt, die die meisten Zeilen in der Posts-Tabelle zurückgibt und deren Ausführung viel Zeit in Anspruch nimmt.

Dies ist ein Beispiel:

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;

Wie kann ich die Quelle dieser Abfragen finden?

holiveira
quelle

Antworten:

4

Verwenden Sie dieses Plugin http://wordpress.org/extend/plugins/debug-queries/, um die Leistung Ihrer Datenbankabfragen zu überprüfen. Es werden viele Details zu jeder einzelnen Abfrage und der Zeit angezeigt, die zum Abschließen der Abfrage benötigt wird, sowie die Zeit, die zum Erstellen der gesamten Seite benötigt wird.

Sisir
quelle
Das Plugin zeigt auch Call From an , damit Sie möglicherweise verstehen, von wo aus die Abfrage erfolgt.
Sisir
2

Möglicherweise möchten Sie eine EXPLAIN für die Abfrage wie folgt ausführen:

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;

Dies zeigt, dass das von MySQL verwendete Zugriffsmuster die von Ihnen benötigten Daten sammelt.

Wenn ich jedoch nur die WHERE- und ORDER BY-Klauseln betrachte, möchte ich diesen folgenden Vorschlag machen: Erstellen Sie einen Index, der die Abfrage beschleunigen kann. Da post_status und post_type statische Werte in der Abfrage haben und post_modified eine Sortierreihenfolge für diese beiden Spalten darstellt, versuchen Sie diesen Index bitte:

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

Versuche es !!!

RolandoMySQLDBA
quelle
0

Probieren Sie das folgende Plugin " Abfrageoberfläche" aus , mit dem Sie die Abfragen anzeigen und eine Schnittstelle erhalten, über die Sie auch überprüfen können, was die Abfrage nimmt, indem Sie ihre Indizes oder Erklärungen überprüfen.

Zeeshan Khan
quelle