慢查询挂起服务器



我的网站遇到了问题,服务器人员告诉它,因为MySQL查询速度慢。我的网站在Wordpress CMS中。下面是会产生问题的查询。我不确定此查询何时运行。我的数据库中有超过 70000+ 个用户。

# Query_time: 1078.445935  Lock_time: 0.000236 Rows_sent: 59  Rows_examined: 379721873
SET timestamp=1538539120;
SELECT DISTINCT wp_users.ID FROM wp_users LEFT JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id )  LEFT JOIN wp_usermeta AS mt1 ON ( wp_users.ID = mt1.user_id )  LEFT JOIN wp_usermeta AS mt2 ON ( wp_users.ID = mt2.user_id )  LEFT JOIN wp_usermeta AS mt3 ON (wp_users.ID = mt3.user_id AND mt3.meta_key = 'wpseo_noindex_author' ) WHERE 1=1 AND wp_users.ID IN ( SELECT DISTINCT wp_posts.post_author FROM wp_posts WHERE wp_posts.post_status = 'publish' AND wp_posts.post_type IN ( 'post', 'page', 'attachment', 'static-block' ) ) AND ( 
wp_usermeta.meta_key = '_yoast_wpseo_profile_updated' 
AND 
( 
( mt1.meta_key = 'wp_user_level' AND mt1.meta_value != '0' ) 
AND 
( 
( mt2.meta_key = 'wpseo_noindex_author' AND mt2.meta_value != 'on' ) 
OR 
mt3.user_id IS NULL
)
)
) ORDER BY wp_usermeta.meta_value+0 
DESC;

Yoast SEO https://wordpress.org/plugins/wordpress-seo/SQL查询的插件问题。 它只是不是为这么多用户设计的,它的SQL查询不希望如此。

当然,最干净的解决方案是不要将该插件用于此类网站。

在情况危急且您无法将其关闭的情况下 - 当然,有一些黑客可以解决这个问题,或者修改代码。

它是从class-author-sitemap-provider.php文件调用的,get_users方法。现在,它会遍历您的所有帖子,然后查询曾经发过帖子的用户。 您可以尝试设置$defaults['has_published_posts'] = true;进入false,至少从查询中排除帖子表。 删除meta_query参数将使查询更加简单。 但所有这些当然都是肮脏的黑客,会影响功能。

最新更新