MySQL作业停留在sidekiq队列

时间:2016-01-11 01:07:38

标签: mysql ruby-on-rails redis sidekiq

My Rails应用程序采用约500个条目的JSON blob(来自API端点),将其抛入sidekiq / redis后台队列。后台作业解析blob然后循环遍历条目以执行基本的Rails Model.find_or_initialize_by_field_and_field()和model.update_attributes()。

如果这项工作在前台,则需要几秒钟(如果那么长)。我看到这些工作在sidekiq队列中保留了8个小时。显然,某些事情是不对的。

我最近重新调整了MySQL数据库,使用75%的可用RAM作为buffer_pool_size并将其划分为3个缓冲池。我原本以为这可能是死锁的一部分,但是盒子上的负载平均值仍远低于任何有问题的状态(5个CPU和~2.5的负载)此时,我不相信数据库是问题所在但是,当然,我无法排除它。

我确定,此时,我需要缩减sidekiq工作者实例。在预期增加的负载时,我将并发性增加到每个工作300个(我在不同服务器上有2个活动工作者。)在相对少量的负载下,队列按预期运行;即使是有问题的工作也会在约1分钟内完成。虽然,根据sidekiq文档> 50个并发工作者是一个坏主意。我对每个实例的150名工人没有任何稳定性问题。问题是这个新引入的作业,执行~500个MySQL查找和更新。

如果这是数据库超时问题,则后台作业应该已失败并已从活动(忙)队列移至失败队列。事实并非如此。他们只是被困在队列中。

我应该检查哪些MySQL或Rails / sidekiq调整参数以确保这些作业成功,失败或正常超时?

0 个答案:

没有答案