【问题标题】:activerecord preloading causing after-effect performance degredation使用后效性能下降的 activerecord 预加载器
【发布时间】:2013-03-12 04:59:59
【问题描述】:

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

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

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

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

然而,它是 * 90 SECONDS * 直到页面实际发送到 浏览器(或 curl;我们都测试过)。

在这段时间内,ruby 进程将 CPU 固定在 100%。

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

WTF 预加载会导致后遗症吗!?

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

Rails 3.2.12

Ruby 1.9.3(p286 和 p327 测试)

【问题讨论】:

    标签: performance activerecord preloader


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-03
      • 2022-01-03
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      相关资源
      最近更新 更多