由于查询速度慢而导致 CPU 使用率极高的 Wordpress 网站
Posted
技术标签:
【中文标题】由于查询速度慢而导致 CPU 使用率极高的 Wordpress 网站【英文标题】:Wordpress website with extreme CPU usage due to slow queries 【发布时间】:2020-12-28 12:55:37 【问题描述】:我正在一个网站上工作,我在该网站上使用高级自定义字段和 woocommerce。我有1800个产品可以由会员创建和编辑(当然每个会员只能编辑自己的产品)。由于每个产品都有大约 40 个自定义字段,因此数据库正在快速增长,并且通过插件“查询监视器”,我发现我为获取这些产品而运行的查询非常慢(0,06 - 0,08)。 我该如何优化呢?我使用redis和OPCache,但是网站很长时间无法访问。
这是我正在运行的查询之一:
SELECT wp_posts.ID
FROM wp_posts
INNER JOIN wp_postmeta
ON ( wp6b_posts.ID = wp_postmeta.post_id )
INNER JOIN wp_postmeta AS mt1
ON ( wp_posts.ID = mt1.post_id )
WHERE 1=1
AND wp_posts.post_author NOT IN (1)
AND ( wp_postmeta.meta_key = 'order_cal'
AND ( ( ( mt1.meta_key = '_product_sub'
AND mt1.meta_value NOT IN ('') ) ) ) )
AND wp_posts.post_type = 'product'
AND ((wp_posts.post_status = 'publish'))
GROUP BY wp_posts.ID
ORDER BY wp_postmeta.meta_value DESC
我听说您可以使用索引优化您的表,但在我的具体情况下找不到合适的教程。
在此先感谢,欢迎所有帮助:)
【问题讨论】:
请改正错字:wp6b_posts
.
【参考方案1】:
对于wp_postmeta
:
INDEX(post_id, meta_key)
更多详情请参见:http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta
【讨论】:
【参考方案2】:您需要在 SQL 中创建和索引,请检查以下索引并在添加后运行您的查询。
ALTER TABLE `wp_postmeta` ADD INDEX `wp_postmeta_idx_meta_key_post_id_meta_value` (`meta_key`,`post_id`,`meta_value`);
ALTER TABLE `wp_posts` ADD INDEX `wp_posts_idx_post_type_post_statu_post_autho` (`post_type`,`post_status`,`post_author`);
ALTER TABLE `wp_posts` ADD INDEX `wp_posts_idx_post_type_post_statu_id` (`post_type`,`post_status`,`ID`);
【讨论】:
以上是关于由于查询速度慢而导致 CPU 使用率极高的 Wordpress 网站的主要内容,如果未能解决你的问题,请参考以下文章