查看WordPress页面执行过程中提交的SQL查询语句

今天照着《WordPress执行效率问题》一文检查了一下我的Blog首页执行的SQL语句。具体方法那篇文章里讲了,就是在wp-config.php文件里添加define('SAVEQUERIES', true);,再在footer.php文件的尾部加上一句<!-- <?php var_dump($wpdb->queries); ?> -->。刷新Blog首页,就可以在页面源代码的尾部找到整个页面执行过程中所提交的所有SQL查询语句了。数组里每一项都包含一个string和一个float,string存储查询语句,float存储查询时间。先看看查询时间,看看哪个占用的时间很长;再看看查询语句,看看哪个可以省略,哪个可以cache起来的。

我的Blog打开的WordPress自带的cache功能,首页需要32次查询,执行时间1s多一点。查了一下,我的Latest Comments插件占了9项。给它加了个cache功能,现在首页已经降到23次查询,执行时间也降到1s以内,8错8错。

很疑惑,为啥他说他有6万篇文章。我大概看了一下,不到500篇文章吧。而且他的大多数查询和我一样,耗时只有零点零零几秒,而查询wp_posts表的几条耗时很多。我的SQL查询语句耗时最多的也就0.01秒。好奇怪,难道wp_posts表被塞了太多垃圾?

Update:昨天研究了一下WordPress的cache功能,给我的wp-statisticswp-statistics插件增加了输出cache命中次数的功能。

WordPress的cache统计有Cold Cache Hits,Warm Cache Hits,Cache Misses三项。Cold Cache Hits指从cache文件或者数据库中读取的,Warm Cache Hits指cache已经读到内存的,Cache Misses指没命中。不看不知道,我的Cold和Warm命中分别有160次和534次,哇,这要节约多少查询啊。

我的Cache Miss次数是14,觉得有点太高了一点,于是在/wp-includes/cache.php文件里做了个小hack,让它把miss的$id输出出来。检查了一下,有3项是options的,其中2项属于Ultimate Tag WarriorUltimate Tag Warrior,1项属于Audio playerAudio player。另外11项是pages,一个空ID和首页10篇文章的10个ID。

看了一下WordPress的源代码,在get_post()函数里,WP通过检查该post_id是否在pages的cache里来判断其是否为page,这才导致了10篇文章进行了10次查询导致了10次miss。由此看来,WordPress对"page"也不薄,起码给page做了cache,而post则享受不到这种待遇。

UTW的2项是UTW新版才加进去的option,UTW好像没有在升级的时候自动建立这两个option。在后台进入UTW选项页,点save,发现数据库里没更新。没办法,只好把那两项选中后更新,好了,数据库里有了。然后再返回来,取消选中那两项。而Audio player的那一项,则是在版本升级的过程中,这个option被删除了。而插件每次启动的过程中,通过判断这个选项是否存在来决定是否执行升级程序。所以,又有了一个miss。唉,这样看来,老外的插件设计的也不咋地啊。

好了,Cache Miss降至11,首页SQL查询次数降至18次,执行时间降至0.6s,已经差不多被我榨干了,再想优化,就该祭出WP-CacheWP-Cache插件了。

本文共有 18 条评论查看WordPress页面执行过程中提交的SQL查询语句


  1. 1 ss

    那ㄧ堆東西如何解讀啊?....^^

  2. 2 icemanpro

    如何打开WordPress自带的cache功能?

  3. 3 Keenzy

    yskin,啥时候来个系统点的wp的优化教程啊,同意的跟帖,呵呵-__-

  4. 4 Keenzy

    今天申请www.google.com/a/,两个小时收到拒绝邮件,郁闷!
    呵呵,一样啊
    现在我都是一发申请邮件,再点收件箱就能看到拒绝信了,貌似我的域名还是邮箱被设成自动回覆拒绝信了。惨...

  5. 5 闲云野鹤

    我申请成功了,第一次直接访问去申请,没成功,第二次用了自由门代理访问,然后信息都填了美国,站点内容添了education,就立马成功了。

  6. 6 Wady

    开启 WP 自带 cache 功能的方法是在 wp-config.php 中加入一句

    define('ENABLE_CACHE', true);

    不过,除非你的博客没开启注册,否则不要使用,官方有公布这个东西有点漏洞。

  7. 7 youcan

    照着步骤做了,怎么我在网页的源代码里没有显示那些sql查询语句和那些string,float的?我的是在本地作测试的。

    只是在后面多了“<!-- 29 queries. 0.518 seconds. -->”这句话。
    :(

    yskin,指导一下!!!

  8. 8 youcan

    "只是在后面多了“<!-- 29 queries. 0.518 seconds. -->”这句话。"

    这句话错了,实际上是一句话也没有多出来。

  9. 9 youcan

    顺便问一下,EzSQL究竟是个什么东西来的,刚刚在寻找答案的时候找到这个生词,搜索一下,中文没有介绍,英文就说是 在php中能够很容易的使用数据库的东东。
    下了一个下来,也不知怎样使用,能具体介绍一下吗?直觉跟上面的问题有关,不知是不是真的?

  10. 10 yskin

    不知道了,我这里可以正常显示。

    这里查到:

    ezSQL是一個非常容易使用的Database Abstraction Layer,WordPress的wpdb也是用這個改寫而成。

    这是一个数据库抽象层。应该是类似于JDBC、ODBC,用于PHP程序的。下面可以支持多种数据库,而上面提供一种接口给程序。当你使用这个数据库抽象层的时候,不再使用专用于一种数据库的函数,而是使用ezSQL提供的函数。这样,程序要从一种数据库换用另一种数据库的时候,只要换一个ezSQL文件就可以了。

    这样看来,我们的WordPress只要经过简单地修改就可以使用Oracle咯?嘿嘿,Blog数据量低,或许那些整天采集的网站,MySQL可能顶不住,需要用Oracle吧。

  11. 11 Zhang

    WP—Cache不好使,干脆用WP-Write HTML全部静态化吧

  12. 12 偶爱偶家

    看了你的文章很受启发, 但我还是不改动这些地方了, 占点就占点, 你用什么空间的呀, 速度还不错
    有空来支持支持小站啊,
    http://blog.2i2j.com
    做个广告手下留情哦

  1. 1 BloggingPro China » WordPress执行效率问题
  2. 2 撞……撞研究! → 泊客Myheimu
    Pingback2006-12-10 9:40 上午
  3. 3 十方界 » 博客文章 » 查看WordPress页面执行过程中提交的SQL查询语句
    Pingback2006-12-17 5:34 下午
  4. 4 Victor’s Blog » WordPress执行效率问题
    Pingback2006-12-24 1:14 上午
  5. 5 加速blog:监测和优化WordPress数据库 @ 阅微堂
    Pingback2008-4-2 7:22 上午
  6. 6 加速blog:监测和优化WordPress数据库 » Allen blog--路爽のblog
    Pingback2008-6-2 10:49 上午

请留下您的评论: