【问题标题】:Wordpress site with 200K posts SQL_CALC_FOUND_ROWS with JOINs slow? Optimize for speed?具有 200K 帖子的 Wordpress 站点 SQL_CALC_FOUND_ROWS 连接缓慢?优化速度?
【发布时间】:2020-10-30 05:22:11
【问题描述】:

我有一个 Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz,24 核 / 32 GB ram 服务器,并且对来自一个拥有 200 000 个帖子的站点的查询感到恐惧。以下是其中一些:

+--------+------------------+-----------+--------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +--------+------------------+-----------+--------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ | 187729 | site_com | localhost | site_com | Query | 2 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (436695) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) AND wp_term_relationships.term_taxonomy_id IN (206,506,636,637,801,4237,4646,4647,4648) ) AND ( wp_postmeta.post_id IS NULL OR ( mt1.meta_key = '_Original Post ID' AND mt1.meta_value = 'deleted' ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 45 | 0.000 | | 187742 | site_com | localhost | site_com | Query | 1 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (289150) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) AND wp_term_relationships.term_taxonomy_id IN (79,308,674) ) AND ( wp_postmeta.post_id IS NULL OR ( mt1.meta_key = '_Original Post ID' AND mt1.meta_value = 'deleted' ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 45 | 0.000 | | 187755 | site_com | localhost | site_com | Query | 8 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (161366) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) ) AND ( ( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' ) AND ( mt1.post_id IS NULL OR ( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' ) ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 9 | 0.000 | | 187787 | site_com | localhost | site_com | Query | 3 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (442261) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) ) AND ( ( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'site2.com' ) AND ( mt1.post_id IS NULL OR ( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' ) ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 9 | 0.000 | | 187798 | site_com | localhost | site_com | Query | 2 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (161180) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) ) AND ( ( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' ) AND ( mt1.post_id IS NULL OR ( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' ) ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 9 | 0.000 | | 187845 | site_com | localhost | site_com | Query | 5 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (160175) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) ) AND ( ( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' ) AND ( mt1.post_id IS NULL OR ( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' ) ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 13 | 0.000 | | 187901 | site_com | localhost | site_com | Query | 0 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (159918) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) ) AND ( ( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' ) AND ( mt1.post_id IS NULL OR ( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' ) ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 13 | 0.000 | +--------+------------------+-----------+--------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+

我尝试了一些与 Wordpress 混淆的功能,我尝试添加 post_id_meta_key 索引,但也失败了。有什么想法吗,伙计们?非常感激!!由于这个站点和 mysql,我的服务器现在的 CPU 使用率为 1000%,平均负载为 20-30 或更多。

【问题讨论】:

    标签: mysql sql wordpress optimization


    【解决方案1】:

    在我看来,WordPress 的设计目的不是处理超过几千个帖子。

    (可能还有更多可以帮助这些查询。)

    【讨论】:

    【解决方案2】:

    已经有一段时间了,但通过创建下面的索引,我能够难以置信地减少与问题中提到的查询非常相似的查询时间:

    CREATE INDEX post_id_meta_key ON wp_postmeta (post_id, meta_key(191));
    

    我通过浏览 Yoast 插件项目的 Github issue comment posted 找到了这个

    希望它对以后遇到类似问题的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-25
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 2016-01-15
      • 2020-01-26
      • 2014-09-28
      • 1970-01-01
      相关资源
      最近更新 更多