【发布时间】:2014-07-11 09:22:41
【问题描述】:
如果任何其他会话使用例如 SERIALIZABLE 事务,这是否重要? autocommit 还是 READ COMMITED 隔离级别?
换句话说,当从多个进程/线程(或其他需要注意的事项)访问数据库时,混合隔离级别(和自动提交)是否有任何危险?
请注意,我知道“普通”问题,例如 SERIALIZABLE 事务要求重试等。我要求的是混合不同隔离级别时可能发生的任何不明显的问题。
编辑:
来自http://www.postgresql.org/docs/9.4/static/transaction-iso.html:
一致使用可序列化事务可以简化开发。保证任何一组并发可序列化事务将具有与一次运行一个相同的效果,这意味着如果您可以证明单个事务,如所写,在以下情况下会做正确的事情独立运行,您可以确信它会在任何可序列化事务的组合中做正确的事情,即使没有任何关于其他事务可能做什么的信息。
这可能表明混合隔离级别不是一个好主意。另一方面,它只是说一致使用 SERIALIZABLE 级别是好的,而不是混合隔离级别是不好的。
【问题讨论】:
-
不,这应该不是问题(但我对此没有硬性参考)
-
@a_horse_with_no_name 同样在这里 - 我怀疑这就是数据库的用途,但我找不到任何具体的参考:-)
-
如果您将其发布到 Postgres 邮件列表,您可能会得到更好的答案。大多数主要开发人员都在那里“闲逛”。如果有人能回答这个问题,那就是他们。
-
@a_horse_with_no_name 好的,我明白了,我会在这里稍等一下,如果没有(确定的)答案出现,我会在那里尝试。
-
我来这里是为了寻找一个可序列化事务是否可能遭受其他级别事务引入的异常的答案。由于我发现您的问题更广泛且答案未提供该信息,因此我在 DBA 中提出了该特定问题。
标签: postgresql transactions isolation-level