apr*_*apr 13 delayed-job ruby-on-rails-3
我在rails应用程序中使用delayed_job和delayed_job_active_record来执行后台作业.我们正在使用基于队列的delayed_job.为了启动延迟我使用以下命令.
RAILS_ENV=staging script/delayed_job -i=1 --queue=queue_name start
Run Code Online (Sandbox Code Playgroud)
问题是下面的查询无限激发.
SQL (0.4ms) UPDATE `delayed_jobs` SET `locked_at` = '2013-04-16 09:27:23', `locked_by` = 'delayed_job.=2 host:ip-10-204-210-77 pid:2168' WHERE `delayed_jobs`.`queue` IN ('queue_name') AND ((run_at <= '2013-04-16 09:27:23' AND (locked_at IS NULL OR locked_at < '2013-04-16 05:27:23') OR locked_by = 'delayed_job.=2 host:ip-10-204-210-77 pid:2168') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
而delayed_job计数为零.因此,应用程序非常慢,页面不会在很多地方加载.
所以这是一个专门为Postgres设计的查询。请参阅https://github.com/collectiveidea/delayed_job_active_record/blob/master/lib/delayed/backend/active_record.rb#L57了解为什么必须这样。
延迟作业的想法确实是它会定期查询数据库,因此只要工作线程正在运行,您问题中的查询就会被触发。这种情况应该每秒发生一次,我无法想象这会对您的应用程序的性能产生重大影响。
您是否在非常有限的硬件(例如非常小的虚拟机)上运行?
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |