【问题标题】:Wordpress slow queryWordpress 慢查询
【发布时间】:2013-04-12 09:48:39
【问题描述】:

我有一个 wordpress 博客,我的共享托管公司警告我活动缓慢。

在我的 mysql slowlog.log 中,我的查询需要大约 2 和 3 天(我认为秒而不是毫秒)

这是日志中的查询:

# Query_time: 2  Lock_time: 0  Rows_sent: 25  Rows_examined: 36266
    SELECT l.ID, post_content, post_name, post_author, post_parent, post_modified_gmt, post_date, post_date_gmt
                    FROM (
                        SELECT ID FROM wp_posts 
                            WHERE post_status = 'publish'
                            AND post_password = ''
                            AND post_type = 'my_post_type'

                            ORDER BY post_modified ASC
                            LIMIT 25 OFFSET 9925 ) o
                        JOIN wp_posts l
                        ON l.ID = o.ID
                        ORDER BY l.ID;

我的问题是:这个查询是核心查询吗?在这种情况下需要 3 秒是正常的吗?如果没有,我该如何补救?如果它不是生成此查询的插件或主题函数,我的意思是核心查询,因为我没有在主题的 function.php 中找到它

我在日志中有另一个慢查询:

# Query_time: 2  Lock_time: 0  Rows_sent: 1  Rows_examined: 29232
SELECT post_modified_gmt FROM wp_posts WHERE post_status IN ('publish','inherit') AND post_type = 'my_post_type' ORDER BY post_modified_gmt ASC LIMIT 1 OFFSET 2999;

这里有同样的问题,是核心查询还是插件相关的等等...

请注意,我已经安装了 WP 超级缓存,我的网站加载速度更快,但在 slowlog.log 中仍然有这些慢查询

PS:我在一家可靠的 hsting 公司 (infomaniak),他们已将我的博客放在专用 VPS 机器上 15 天,让我解决问题

感谢您的帮助,抱歉我的英语很糟糕

-------------------------------编辑--- ------------------------------------

安装 wp super cache 后,这些查询再也没有办法了 :(

# Query_time: 2  Lock_time: 0  Rows_sent: 25  Rows_examined: 49908
SELECT l.ID, post_content, post_name, post_author, post_parent, post_modified_gmt, post_date, post_date_gmt
                FROM (
                    SELECT ID FROM wp_posts 
                        WHERE post_status = 'publish'
                        AND post_password = ''
                        AND post_type = 'my_post_type'

                        ORDER BY post_modified ASC
                        LIMIT 25 OFFSET 23550 ) o
                    JOIN wp_posts l
                    ON l.ID = o.ID
                    ORDER BY l.ID;

【问题讨论】:

  • 您的托管公司是谁?一些便宜的共享主机可能非常慢。我从我的网站上运行了 3 个 Wordpress 网站,它们运行良好。
  • 我在 infomaniak 上托管,它非常可靠,他们已将我的所有博客放在专用 (VPS) 服务器上 15 天让我解决问题

标签: mysql wordpress mysql-slow-query-log


【解决方案1】:

好的,我发现这些查询有什么问题:

首先,它们不是由名为“Yoast WordPress SEO”的插件生成的核心查询,该插件正是该插件的站点地图部分。 “文件:class-sitemaps.php”

当我禁用插件的站点地图部分时,我的 slowlog.log 文件中没有这些查询。

【讨论】:

    【解决方案2】:

    这两个查询是核心查询,不能去掉。

    最好的办法是使用缓存插件(如 wp 超级缓存),

    【讨论】:

    • 感谢您的回复,正如我上面提到的,我已经安装并激活了 wp 超级缓存,但在 slowlog.log 中仍有新条目。您认为 Query_time: 2(2 秒)是正常时间还是可疑?
    • 我认为问题在于查询搜索超过 36000 个结果(你有很多文章)。事实上,我不确定这是 post_type = 'my_post_type' 的核心查询原因。尝试检测您是否在主题中某处没有新的 WP_query 按自定义帖子类型过滤帖子
    • 是的,我在主页的查询中添加了'my_post_type':$query->set('post_type', array('my_post_type'));但是我该怎么做,因为我想在主页中显示 my_post_type 类型的帖子。 wordpress 不能处理 36000 个自定义帖子类型的文章吗? :(
    • Wordpress 可以,但你的主机,我不知道,这也取决于你的网站流量。
    • 我认为问题是:这些查询的 2 秒或 3 秒是共享主机上的正常 wordpress 行为吗?
    【解决方案3】:

    我把这个作为慢查询得到这个查询会命中的地方

    SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish')  ORDER BY wp_posts.post_date DESC LIMIT 0, 10
    

    其实我手动设置posts_per_pages为16,

    【讨论】:

    • 是的,这是由于我在functions.php中使用过的url_post_id()函数
    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 2014-03-01
    • 1970-01-01
    • 2019-07-17
    • 2021-07-23
    • 2012-01-15
    • 1970-01-01
    • 2020-05-06
    相关资源
    最近更新 更多