performance - 使用后效性能下降的 activerecord 预加载

标签 performance activerecord preloader

使用大量外围对象进行大型事件记录查询。

添加“.includes”(预加载)通过压缩所有
N+1。

然后页面会快速呈现并将其输出到日志中:

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

然而,它是 * 90 秒 * 直到页面实际发送到
浏览器(或 curl;我们已经对两者进行了测试)。

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

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

WTF 预加载会导致后效吗!?

一位同事假设存在垃圾收集问题;我该如何检验这个理论?

导轨 3.2.12

Ruby 1.9.3(经过 p286 和 p327 测试)

最佳答案

发现问题;它是子弹 gem ( https://github.com/flyerhzm/bullet )。

这个 gem 巧妙地发现和报告 N+1 查询和过度包含,但在非常大的结果集的情况下,它会大大降低应用程序的性能。

关于performance - 使用后效性能下降的 activerecord 预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15304282/

相关文章:

objective-c - Objective-C 运行时性能惩罚的细节

jquery - CSS3 动画在 webkit 中不起作用

ios - 进度 HUD 显示太晚

python - 在 Python 中使用 if 条件加速逐行循环

python - 高效地将行添加到 pandas DataFrame

sql - rails has_many 至少有一个 child 具有值(value)

ruby-on-rails - 关联关联的 Rails 作用域

javascript - 如何为 ExtJS 4 应用程序创建预加载器

android - 我可以仅在 Android 调试版本中启用 multidex 吗?

mysql - rails是否支持mysql json数据类型