我读了Analyzing a read-only transaction anomaly under snapshot isolation。然后在PostgreSQL中显示只读事务异常发生在READ COMMITTED
和SERIALIZABLE
中,如下图所示:
其实,我并不理解只读事务异常,因为它很复杂。
现在,我试图在PostgreSQL的READ COMMITTED
中产生只读事务异常,但我做不到。
我的问题:
1.什么是只读事务异常?
1.如何在PostgreSQL的READ COMMITTED
中产生只读事务异常**?**
1条答案
按热度按时间bnlyeluc1#
事务异常*是指多个事务的并发执行产生的结果不是事务的连续执行所能产生的结果。
您参考的文章在“异常如何发生”一章中准确地展示了异常是如何发生的。
这种反常现象发生在
READ COMMITTED
是完全正常的。然而,它可能不会发生在SERIALIZABLE
。在SERIALIZABLE
隔离条件下,不允许出现任何异常。由于该报声称它在PostgreSQL的
SERIALIZABLE
隔离中观察到了异常,所以它肯定做错了什么。我看了一下复制件,但它是用一种我看不懂的语言写的。也许作者误解了SERIALIZABLE
的工作方式,并将序列化错误视为失败;很难说。指向这个方向的是,他们报告了甲骨文的许多故障。虽然事实是Oracle的SERIALIZABLE
实现是不正确的(它实际上是READ COMMITTED
,他们故意误解了SQL标准),但它的实现会生成如此多的序列化失败,以至于它几乎无法使用。因此,虽然这篇文章的前三章是正确的引用,但其余的是误解和错误Assert的混合体。