对简单更新的慢速运行查询

时间:2016-09-07 19:53:36

标签: ruby-on-rails postgresql activerecord

我有一个模板表,其中包含模板和一些计数器(即:sent_count),表示模板的使用频率。

在制作中,我遇到了一些问题,有时候,sent_count的更新速度非常慢 - 比如7.5M毫秒 - 我假设这意味着它永远陷入困境。由于这些都发生在后台作业中,最终我的所有后台sidekiq作业最终都停留在这些长时间运行的查询上,这些查询永远不会超时,因为不会抛出任何错误。我正在使用目前没有作业超时机制的Sidekiq。

表中只有<25k行。此外,当这些更新趋于卡住时,似乎它们通常都与单个用户的模板相关。我目前没有sent_count的索引,因为它不是任何类型的外键或密钥。

这是我更新sent_count

的模型代码
def increase_sent_count!
  update_attributes!(sent_count: (sent_count + 1)) 
end

为什么会发生这种情况?

如何我可以添加索引,重构我的数据库或代码以防止这种情况发生吗?

PG Hero suggests I add an index PgHero建议发现这些查询更新查询是我最慢的查询,并建议我添加一个索引。但是我的理解是添加索引会增加读/写速度而不是写速度。

0 个答案:

没有答案