【问题标题】:Performance impact of Resque worker re-establishing connecting in after_forkResque worker 在 after_fork 中重新建立连接的性能影响
【发布时间】:2013-12-01 00:24:39
【问题描述】:

我正在尝试了解这样做对性能的影响:

Resque.before_fork do
    Rails.logger.info "in resque.rake before fork"
    defined?(ActiveRecord::Base) and
      ActiveRecord::Base.connection.disconnect!
end

Resque.after_fork do
    Rails.logger.info "in resque.rake after fork"
    defined?(ActiveRecord::Base) and
      ActiveRecord::Base.establish_connection
end

这样做不会显着影响性能,因为我们不再保持与数据库的持久连接并且在每项工作中一次又一次地这样做。就我而言,这项工作所做的工作非常小。它所做的只是插入一条记录,如下所示:

Foo.create(:name => "Hello World")

由于工作如此之小,我想知道在工作中这样做是否真的会损害绩效。你的想法?

【问题讨论】:

    标签: ruby-on-rails performance redis rails-activerecord resque


    【解决方案1】:

    我的理解是,这些语句的存在是为了防止在 Resque 作业失败并需要重试的情况下连接到数据库失败。见this issue ...听起来这主要是postgres的问题,但也可能是其他数据库的问题。

    我的直觉告诉我,性能影响将是最小的,但您总是可以尝试删除这些行并在暂存环境中测试一段时间,然后再将其移至生产环境,但我个人会放弃它.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      相关资源
      最近更新 更多