4

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

我们需要阅读器(保证只读:网络数据同步、实时监控视图等)能够读取一致的数据,而不会被阻止或阻止更新。我们对所有东西都使用了 SNAPSHOT,但是有太多的一致性失败,所以将更新过程切换到 SERIALIZABLE。

我已经阅读过有关同时使用不同隔离级别的影响,但并不完全清楚。我看过锁兼容性矩阵,并阅读了各种信息。看起来不错,但我真的很感谢有实际经验的人对任何重大陷阱的明智指导。

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

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

4

1 回答 1

4

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

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

于 2010-12-05T01:09:42.380 回答