it-swarm.com.de

Wie finde ich die Quelle für langsame Abfragen in Wordpress?

Ich habe eine WordPress-Site mit mehr als 8000 Beiträgen 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 Tabelle posts zurückgibt, und die 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?

8
holiveira

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 vorgenommenen Abfrage sowie zu der Zeit angezeigt, die zum Abschließen der Abfrage erforderlich ist, und zu der Zeit, die zum Erstellen der gesamten Seite erforderlich ist.

4
Sisir

Möglicherweise möchten Sie eine EXPLAIN-Anweisung 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.

Ich möchte jedoch nur auf die Klauseln WHERE und ORDER BY blicken und den 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 bitte diesen Index:

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

Versuche es !!!

2
RolandoMySQLDBA

Dieses Problem hängt mit dem Google XML-Sitemaps-Plugin zusammen. http://wordpress.org/support/topic/plugin-google-xml-sitemaps-performance-issues-on-large-wp_posts-tables

Sie können die Option "Manuelle Sitemap-Erstellung über GET Request aktivieren" verwenden. Und den Generierungsfortschritt manuell auslösen.

Probieren Sie das folgende Plugin, Query Interface , mit dem Sie die Abfragen anzeigen und eine Schnittstelle erhalten, in der Sie auch überprüfen können, welche Informationen die Abfrage enthält, indem Sie ihre Indizes oder Erklärungen überprüfen.

0
Zeeshan Khan