最近服务器速度越来越慢,有时候服务器负载经常到达十几甚至看到过二十。博客打开的速度也慢了起来,今天花时间研究看看到底什么网站、什么数据库查询引起的问题。
首先在服务器端对mysql设置了慢速sql日志输出,详细的设置方法见:mysql慢速(slow log)脚本分析
使用mysql自带的慢速日志查询工具对日志进行分析,按照最多查询记录排序,发现如下sql是查询出记录最多的,这条语句居然查出来9946条记录,俄地个乖乖,不慢才怪:
Count: 18 Time=4294967294.94s (-1s) Lock=0.00s (0s) Rows=552.6 (9946), 2users@localhost
SELECT post_title, DAYOFMONTH(post_date) as dom FROM wp_posts WHERE YEAR(post_date) = 'S'
AND MONTH(post_date) = 'S' AND post_date < 'S' AND post_type = 'S' AND post_status = 'S'
这个是mysqldumpslow出来的统计排列第一的结果。然后进入日志查找具体的sql语句发现:
use abc;
SELECT post_title, DAYOFMONTH(post_date) as dom FROM wp_posts
WHERE YEAR(post_date) = '2008' AND MONTH(post_date) = '10'
AND post_date < '2008-10-05 13:09:33' AND post_type = 'post'
AND post_status = 'publish';
这样的类似语句很多,变化的都是时间,看了这个马上就明白这条语句不就是wordpress存档查询么!去看了一下wordpress,侧边栏输出了所有存档(archive)链接,我猜测就是因为存档链接的输出引起的这些sql查询。马上回到后台,关闭了所有的存档输出,再检测一段时间的mysql,发现这样的语句消失了!
终于找到了原因了,服务器负载有所降低,看来以后wordpress不能输出存档链接了!其实还有一个办法就是静态化日志链接也可以解决这个问题,我的做法是直接静态化了首页,即使首页输出了存档链接也不会引起查询。这样做也能降低一部分mysql查询。

One Comment
这些应该是由wp_get_archives这个语句造成的。
如果你的wp支持object cache,你可以给这部分内容设置缓存的。
Post a Comment