V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
zzuyanan
V2EX  ›  MySQL

wordpress 发现 mysql 执行这条语句时间太长了,咋优化?

  •  
  •   zzuyanan · Oct 22, 2017 · 5516 views
    This topic created in 3110 days ago, the information mentioned may be changed or developed.
    show full processlist:
    语句如下:Copying to tmp table | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (749) ) 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, 24 |

    这似乎是在检索某个分类下的最新的文章,但是执行时间高达 103 秒,难道是数据量太大,大约 600 万文章吧,那也不至于这么慢? vps 配置也不低啊,6 核 8G 内存,ssd 硬盘。 请教各位 了!
    15 replies    2017-12-03 12:43:31 +08:00
    msg7086
        1
    msg7086  
       Oct 22, 2017
    600 万文章用 WP 你不定制的话这配置我觉得跑不动。
    隔壁有个 60 万文章的用 DLE (号称比 WP 快?)独服都跑不动,老老实实定制完,双核 VPS 就能随便跑了。
    abccccabc
        2
    abccccabc  
       Oct 22, 2017
    个人感觉 wordpress 的表结构设计不好,posts 表数据一大,死翘翘。

    SQL_CALC_FOUND_ROWS 在速度上会比 COUNT(*)慢很多,具体有多慢,取决于你的索引还有一些别的因素, count 大约要比 SQL_CALC_FOUND_ROWS 快上 10 倍.

    https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
    zzuyanan
        3
    zzuyanan  
    OP
       Oct 22, 2017
    @msg7086 哪里有定制啊 ,请教了
    zzuyanan
        4
    zzuyanan  
    OP
       Oct 22, 2017
    @msg7086 另外 DLE 是啥?
    msg7086
        5
    msg7086  
       Oct 22, 2017
    @zzuyanan DLE = Datalife Engine
    哪里有定制?我也不知道。把预算和定制需求报出去问问看咯。
    wdlth
        6
    wdlth  
       Oct 22, 2017
    有些功能不常用的可以把它精简一下,像这个功能的结果你可以先缓存起来,毕竟不是所有时候都需要更新最新文章列表。
    zzuyanan
        7
    zzuyanan  
    OP
       Oct 22, 2017
    @wdlth 我目前就是这种思路,每天定时更新最新文章 3 次并缓存,但是每次更新都得要 2 个小时啊,因为分类很多,如果每个分类我只更新前 20 页的内容,也需要很长时间啊
    zzuyanan
        8
    zzuyanan  
    OP
       Oct 22, 2017
    @msg7086 问了报价,8000 !
    AlwaysBehave
        9
    AlwaysBehave  
       Oct 22, 2017
    @zzuyanan 算很便宜的吧,按照现在这个“趋势”
    你具体需求是什么?实时更新?
    zzuyanan
        10
    zzuyanan  
    OP
       Oct 22, 2017
    @AlwaysBehave 其实就是让分类页的最新文章能够快速显示出来,现在表太大 40G,显示的太慢了。
    rogwan
        11
    rogwan  
       Oct 22, 2017
    @zzuyanan Copying to tmp table 你这个不是建一个临时的新文章表吗?这个 copy 任务可以定时后台执行,用户数据直接从 tmp table 里读取最新文章,和主表多大无论几十 G 都没有关系了。
    zzuyanan
        12
    zzuyanan  
    OP
       Oct 22, 2017
    @rogwan 这个思路好,从临时表里抽数据
    zzuyanan
        13
    zzuyanan  
    OP
       Oct 22, 2017
    @abccccabc 是的,所以我准备再建立一个 wp_posts_1 表,只放最新的 10000 条记录,然后从这个表抽取数据,经过测试非常快。但是问题来了,如何让 wordpress 从 wp_posts_1 表里提取数据呢?要知道默认都是从 wp_posts 表提取的,wp_query 并没有提供改表的参数啊
    aksoft
        14
    aksoft  
       Nov 21, 2017
    随便问一句,这个是什么网站。。
    likuku
        15
    likuku  
       Dec 3, 2017
    @zzuyanan 没有参数,那就去改 wp 源代码了哦
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1398 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 17:06 · PVG 01:06 · LAX 10:06 · JFK 13:06
    ♥ Do have faith in what you're doing.