我有一个典型的Java + Postgres环境(该项目是遗留的)。后端的持久性层混合了声明的隔离级别--其中一些是默认的,即READ,另一些是可重复读取的,还有一些是SERIALIZABLE。
有时,从具有不同隔离级别的并行事务访问相同的DB表。
对于此类交易的交互是否有严格的规则?
我可以或多或少地理解,当所有事务都具有相同的隔离级别时,其中一些事务为了细粒度地避免不受欢迎的读取现象而声明显式锁,而不是上面描述的情况。
发布于 2021-06-04 09:31:24
混合不同的隔离级别是没有问题的,每个事务都将按照规范进行操作。例如,在REPEATABLE READ事务中,您将看到数据库的稳定快照,无论其他事务有哪些隔离级别。
这里最大的例外是SERIALIZABLE。如果要保证可序列化,则所有涉及的事务都必须是可序列化的,以便它们获得所需的谓词锁。如果将隔离级别混合在一起,则不再保证存在等效的串行执行。
如果您仔细想想,这是有意义的:可序列化性是对整个工作负载的约束,而不仅仅是对单个事务的约束。
https://dba.stackexchange.com/questions/292743
复制相似问题