当一个单独的进程在可序列化事务中处理连续传入的数据时,使用 SNAPSHOT 隔离来一致地读取数据以进行查看是否存在任何问题,而无需锁定、阻塞或脏/幻读?

我们需要读者(保证只读:Web 数据同步、实时监控 View 等)能够读取一致的数据,而不被阻止或阻止更新。我们对所有内容都使用 SNAPSHOT,但一致性失败太多,因此将更新过程切换为 SERIALIZABLE。

我已经阅读了有关同时使用不同隔离级别的影响,但并不完全清楚。我看过 lock compatibility matrix ,并阅读了各种信息。看起来没问题,但我真的很感激有实际经验的人对任何主要陷阱的一些明智的指导。

在写入 SERIALIZABLE 事务时为读者使用快照隔离是否有任何问题?在某些情况下它会阻止 SERIALIZABLE 事务吗?使用 SNAPSHOT 与 READ COMMITTED(READ_COMMITTED_SNAPSHOT ON)有什么好处?

谢谢,非常感谢任何帮助:-)

最佳答案

在 SNAPSHOT 隔离级别下执行的读取读取版本存储中的任何修改数据。因此,它们仅受写入的影响。写入在所有隔离级别下的行为都相同。因此,无论并发事务的隔离级别如何,快照读取的行为都是相同的。

READ_COMMITTED_SNAPSHOT ON 使 READ COMMITTED 充当快照。实际上,它是 SNAPSHOT:提供 READ_COMMITTED_SNAPSHOT 作为将应用程序移植到 SNAPSHOT 而无需更改代码的快速方法。所以第一段所说的一切都适用。

关于sql-server - 同时使用 Serializable 和 Snapshot 隔离的含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4356631/

10-10 10:17
查看更多