支持这博客的MySQL数据库消耗大量CPU,有效地带领选址沿着走3-4次这个星期。 我认识一名明显的罪犯。 然而现实不同。

我知道我有一段时间了有一次超大询问,未贮藏,并且可能造成MySQL服务器装载:
精选的cat_ID,作为类别,算作是的cat_name (*) ‘计数’
从$wpdb->categories, $wpdb->post2cat, $wpdb->posts
那里cat_ID = category_id和
category_nicename! = ‘标题’和ID = post_id和
post_status = ‘出版’
由cat_name的小组
有计数(*) > 10
由‘计数’ DESC的命令
极限0, 10

我不可能看一个明显的方式优选此不遏制功能。 万一您wondeering替代category_nicename! = ‘标题’cat_ID = 37不帮助。

我也考虑使用 慢询问日志 精确定位问题。 幸运地未需要他们都。 我从友好的WestHost高装载 支持 得到了电子邮件。 Jonny通过充分一再跑‘展示发现了PROCESSLIST; ’罪犯是:

选择分明cat_ID, cat_name
从st_categories, st_post2cat
由category_nicename的命令;

这使我大吃一惊。 Th询问作为任何地方在3-5秒之间。 在与是足够好超载服务器的多个同时请求的高装载。 解答是看上去简单的:

选择分明cat_ID, cat_name
从st_categories
由category_nicename的命令;

原始的询问是重复和大手大脚的。 最初我打算显示与一个或更多岗位的仅类别在他们。 某处在线下我忘记增加条目的地方。 今天所有我的类别有岗位。 那么去除st_post2cat从从名单是足够好给0.01秒减少执行时间。

实得工资的教训是:

  • 不要猜测瓶颈询问; 发现它。
  • 象“展示充分的处理名单的”简单的工具经常是象明确一样,艰苦分析象慢询问日志的工具。
  • 有从您的网络主持 提供者的好支持 不伤害