activerecord预加载器使用后效性能降级

时间:2013-03-08 22:17:15

标签: performance activerecord preloader

使用大量外围对象进行大型的activerecord查询。

添加“.includes”(预加载)可以通过压缩所有内容来大大加快速度 N + 1点的

然后页面快速渲染并将其吐出到日志中:

Completed 200 OK in 504ms (Views: 104.2ms | ActiveRecord: 86.0ms)

然而,在页面实际发送到之前,它是 * 90 SECONDS * 浏览器(或卷曲;我们已经测试过两者)。

在此期间,ruby进程将CPU固定为100%。

如果我们删除“.includes”(预加载),它会恢复正常蹩脚 表现没有页面之间的虚无的一分半裂缝 渲染和浏览器传递。

WTF执行预加载后会产生效果!?

一位同事假设垃圾收集问题;我该如何测试这个理论?

Rails 3.2.12

Ruby 1.9.3(已测试p286和p327)

1 个答案:

答案 0 :(得分:1)

发现问题;这是Bullet的宝石(https://github.com/flyerhzm/bullet)。

这个宝石巧妙地发现并报告了N + 1个查询和过分夸大的包含,但是对于非常大的结果集,它会大大降低应用程序的性能。