我有5000个常规职位,一个职位类型有6000个职位,另一个职位类型有2000个职位。不用说,这使得wp_posts
桌子很大。更不用说,我已经设置了自定义分类法来模拟职位类型,因此对于输入公司职位类型的每个公司A,都有公司A,我手动将公司A输入公司分类法。这样,当我定期发布关于a公司的帖子时,我可以有效地tag 公司A进入帖子,然后该帖子出现在公司A的自定义帖子类型页面上。
Specs : 将WP Super Cache与Cloudflare一起作为CDN运行。主题是Wordpress TwentyEleven,但大量定制。Server: 2048 RAM,80gb Raid,8+CPU 4倍优先级,5000GB带宽。流量为750k次/月;20万uniques。
我开始看到性能问题迅速增加,在上周的两个例子中,我得到了
连接到数据库时出错
必须重新启动mysql服务。更不用说,高负载平均每天发送几次电子邮件。
已运行调试查询。使用WP超级缓存运行它。已卸载的WP超级缓存;已尝试启用大多数选项的W3 Total Cache。在两次测试中,我都看到了这两个查询导致的最长加载时间(但仅在第一次加载时!在后续加载时几乎为0):
Time: 7.79628753662E-5
Query: SELECT FOUND_ROWS()
Call from: require(\'wp-blog-header.php\'), require_once(\'wp-includes/template-loader.php\'), include(\'/themes/child-theme/index.php\'), WP_Query->__construct, WP_Query->query, WP_Query->get_posts, WP_Query->set_found_posts, W3_Db->query, W3_DbCache->query, W3_DbCallUnderlying->query, W3_Db->query, W3_DbProcessor->query, W3_Db->default_query
Time: 6.29425048828E-5
Query: SET SESSION query_cache_type = 0;
Call from: require(\'wp-blog-header.php\'), require_once(\'wp-includes/template-loader.php\'), include(\'/themes/child-theme/index.php\'), get_footer, locate_template, load_template, require_once(\'/themes/child-theme/footer.php\'), wp_footer, do_action(\'wp_footer\'), call_user_func_array, Debug_Queries->the_queries, Debug_Queries->get_queries, W3_Db->query, W3_DbCache->query, W3_DbCallUnderlying->query, W3_Db->query, W3_DbProcessor->query, W3_Db->default_query
我确实删除了一个数组,这样我们就可以在常规帖子之外查找帖子类型,但这似乎没有什么区别。
完整示例查询输出:http://pastebin.com/L0mSXe9q
此外,以下是主索引的模板代码:
<?php if ( have_posts() ) : ?>
<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php if ( \'status\' == get_post_format() ) {
get_template_part( \'content-status\', get_post_format() );
} else get_template_part( \'excerpt\', get_post_format() );
?>
<?php endwhile; ?>
真的不知道该从哪里着手。