Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby,当有太多的作业挂起时,DelayedJob会变慢_Ruby_Delayed Job - Fatal编程技术网

Ruby,当有太多的作业挂起时,DelayedJob会变慢

Ruby,当有太多的作业挂起时,DelayedJob会变慢,ruby,delayed-job,Ruby,Delayed Job,当表格延迟的\u工作开始在数百个工作岗位上增长时,工人的绩效开始呈指数级下降。我已经多次与这个问题作斗争,因此我将我的发现告诉未来的新员工这场噩梦 关于此问题,DelayedJobs项目中存在几个问题: 问题在于avery worker运行中DelayedJob使用的查询: UPDATE`delayed_jobs`SET`locked_at`='2014-04-17 22:32:20',`locked_by`='主机:b38f770a-f3f3-4b2a-8c66-7c8eebdb7fe

当表格
延迟的\u工作开始在数百个工作岗位上增长时,工人的绩效开始呈指数级下降。

我已经多次与这个问题作斗争,因此我将我的发现告诉未来的新员工这场噩梦

关于此问题,DelayedJobs项目中存在几个问题:

问题在于avery worker运行中DelayedJob使用的查询:

UPDATE`delayed_jobs`SET`locked_at`='2014-04-17 22:32:20',`locked_by`='主机:b38f770a-f3f3-4b2a-8c66-7c8eebdb7fea pid:2',其中((在10010运行
像延迟作业一样创建表延迟作业备份;
插入到延迟的\u作业\u备份中,从id<10010的延迟的\u作业中选择*;
从id<10010的延迟_作业中删除;
--开始工作
--而延迟备份中的作业
--等待批处理完成
插入延迟的\u作业,从延迟的\u作业中选择*备份限制1000;
删除延迟的\u作业\u备份限制1000;
--结束

延迟作业不是针对大量作业进行优化的。长期解决方案是使用类似sidekiq()的方法,但短期内,您可以使用以下策略清除延迟作业队列:


对于MySQL 5.6,在
列的
上添加一个索引有很大帮助。

在底层数据库中添加一个适当的索引,不需要进行上述处理就不能解决这个问题吗?@mcfinnigan看起来不是那么容易,在提到的博客文章和github问题中,有很多尝试来解决这个问题他的方法很优雅,但没有一个有效。作为一项测试,我在数据库中添加了500000个作业,使用postgres没有发现任何性能问题,作业在0.00x秒内完成。您的作业是否有某些特殊情况加剧了此问题?