我如何在WordPress中找到慢查询的来源?

时间:2011-08-17 作者:holiveira

我有一个WordPress网站,有8000多篇帖子,每次我添加一篇新的帖子,网站都会失去响应。我查看了MySQL慢速查询日志,发现它正在执行一个select,返回posts表中的大多数行,并且需要花费大量时间来执行。

这是一个示例:

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;
如何找到这些查询的来源?

4 个回复
SO网友:Sisir

尝试使用此插件http://wordpress.org/extend/plugins/debug-queries/ 用于检查数据库查询的性能。它显示了有关每个查询的详细信息、完成查询所需的时间以及生成整个页面所需的时间。

SO网友:RolandoMySQLDBA

您可能需要对查询执行如下解释:

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;
这将揭示MySQL在收集所需数据时采用的访问模式。

然而,只要看看WHERE和ORDER BY子句,我想提出以下建议:创建一个索引,可以帮助查询速度加快。由于post\\u status和post\\u type在查询中具有静态值,并且post\\u modified为这两列提供了排序顺序,请尝试此索引:

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

SO网友:Hüseyin Berberoğlu

这个问题与Google XML Sitemaps插件有关;http://wordpress.org/support/topic/plugin-google-xml-sitemaps-performance-issues-on-large-wp_posts-tables

您可以使用“通过GET请求启用手动站点地图构建”选项。并手动触发生成进度。

SO网友:Zeeshan Khan

尝试以下插件,Query Interface, 这将让您显示查询,并为您提供一个界面,您还可以通过检查其索引或解释来检查查询的内容。

结束