我正在试图弄清楚当混合可序列化和较低级别的隔离时的行为是什么,但没有太多的运气。具体地说,我们有一个reorder-queue-item事务,它当前正在接受表锁,以确保在此期间不会向其中添加新的项。使其序列化并读取队列头(以确保对结果的依赖)是否会提供相同级别的保证,即使其他事务在可重复读取时操作?
使用PostgreSQL 9.5。
PS。我知道有another question with a similar title,但它已经有4年多的历史了,它的问题没有那么具体,而且唯一的答案基本上是没有来源的,因为引用的材料,并且没有真正回答这个问题。
发布于 2018-07-24 14:18:44
为了保证可序列化,所有参与的事务都应该使用SERIALIZABLE隔离级别。
但我不确定可序列化隔离是您的问题的解决方案。它不会阻止任何人从队列读取或向队列写入,它会使一些事务失败,失败的事务很可能是试图重新排序队列的事务。
我认为在这种情况下锁是最好的选择。使用可序列化事务将对性能产生同样糟糕的影响,不同之处在于,您必须不断重试事务,直到重新排序成功。
https://stackoverflow.com/questions/51486214
复制相似问题