我正在运行一个对postgres 4.7数据库有很多查询的sidekiq作业。当它并行运行时,由于某种备份,它的运行速度大约是3倍。运行配置文件时,整个作业都会显示,并且没有瓶颈。它在csv中的每一行上运行,访问每个单元格,并为该单元格创建数据库条目。整体结构如下:
def perform(row)
ActiveRecord.base.transaction do
row.cells.each do |cell|
# db ops for cell
end
# fetch metadata for row from api and write
end
end
作业不是线程安全的,并且由于某些单元格与其他行共享值,因此会遇到upsert isues。当有多个并行运行时,我也看到运行时神秘地从每个作业大约2.5秒猛涨到每个作业大约15秒。我不确定它是否是锁定问题,或者作业是否只是等待线程上的处理时间。老实说,我很难过,并且想知道我可以采取什么方法来找到错误的来源。