我正在使用 PostgreSQL。我曾尝试构建一个专门使用可串行化事务的系统,希望它能简化我的应用程序开发。我已将只读事务标记为 READ ONLY。然而,我的写入经常与只读查询获取的 SIReadLock 发生争用,从而将写入变成连续重试。从那时起,我就以 READ COMMITTED 方式运行只读查询,现在一切都运行顺利。
现在我想知道 - 如果事务是只读的,也就是说,如果我在隔离级别“可重复读取”下运行查询,可能会发生什么序列化异常,并且可以通过“可串行化”(及其相关成本)来防止?我很难想出一个例子来说明这种情况下所提供的好处。
这种情况很罕见,很长一段时间以来,人们都认为这是不可能的。关于可串行化快照隔离 (SSI) 的 Postgres wiki 确实包含专门介绍此内容的部分,并提供了几个示例。本节以以下语句开始:
这些示例太长且复杂,无法在此处重现。
您可能还对Alan Fekete、Elizabeth O'Neil 和 Patrick O'Neil 所著的“快照隔离下的只读事务异常”中所报告的快照隔离(而非 SSI)下的相关行为感兴趣。
论文摘要是: