我有一个模板表,其中包含模板和一些计数器(即: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
为什么会发生这种情况?
如何我可以添加索引,重构我的数据库或代码以防止这种情况发生吗?
PgHero建议发现这些查询更新查询是我最慢的查询,并建议我添加一个索引。但是我的理解是添加索引会增加读/写速度而不是写速度。