Tom*_*ski 7 postgresql transactions isolation-level
如果任何其他会话使用例如自动提交或 READ COMMITED 隔离级别,这对 SERIALIZABLE 事务是否重要?
换句话说,从多个进程/线程(或其他需要注意的地方)访问数据库时,混合隔离级别(和自动提交)是否有任何危险?
请注意,我知道“普通”问题,例如要求重试的 SERIALIZABLE 事务等。我要求在混合不同隔离级别时可能发生的任何不明显的事情。
编辑:
从http://www.postgresql.org/docs/9.4/static/transaction-iso.html:
一致使用可序列化事务可以简化开发。保证任何一组并发可序列化事务将具有与一次运行一个相同的效果意味着如果您能证明单个事务,如所写的那样,在单独运行时会做正确的事情,您可以有相信它会在任何可序列化事务的组合中做正确的事情,即使没有关于其他事务可能会做什么的任何信息。
这可能表明混合隔离级别不是一个好主意。另一方面,它只是说一致使用 SERIALIZABLE 级别是好的,而不是混合隔离级别是坏的。
当前事务的所有语句只能看到在该事务中执行第一个查询或数据修改语句之前提交的行。如果并发可序列化事务之间的读写模式会造成这些事务的任何串行(一次一个)执行不会发生的情况,则其中一个事务将被回滚并出现serialization_failure错误。
这意味着,一个SERIALIZABLE事务仅在针对另一个SERIALIZABLE事务运行时才会有不同的行为。如果它们针对非SERIALIZABLE交易运行,则它们应该像交易一样行事REPEATABLE READ。这表明,混合这些事务隔离级别是完全安全的。
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |