postgresql 对于一个长达数小时的@transaction.atomic django后台进程,我应该有什么顾虑?

zlhcx6iw  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(1)|浏览(113)

我有一个运行的celery后台任务,可能需要5个多小时才能完成。它主要是创建新对象,它将生成大约100 k个新对象。如果在此期间出现错误,我希望将其全部回滚,就像从未发生过一样。我的策略是将后台任务 Package 在@ transaction. atomic中。由于这是一个运行时间很长的事务,有什么我应该特别关注的吗?如果我在4小时后失败了,我需要担心我的Postgres数据库在生产中冻结吗?有没有其他方法可以做到这一点,或者transaction.atomic是最好的策略?
我目前在@transaction.atomic块中运行它。它目前在开发中工作得很好,但我担心它可能会在生产中导致问题。

g6ll5ycj

g6ll5ycj1#

它可能会导致各种各样的问题,但它是否会导致其中任何一个取决于我们没有的许多细节。
如果它回滚,它不会导致PostgreSQL简单地冻结。任何特定的数据块在遇到它时都会被逐步回滚-无论是通过其他“自然”查询,还是通过VACUUM。需要检查一个数据块的查询不会冻结等待99,999个其他对象也被清理。
但是,另一个想要插入或更新元组的事务将导致对大型事务所做的事情的约束违反,这将阻止直到大型事务完成。

相关问题