同时使用Serializable和Snapshot隔离的含义

时间:2010-12-05 00:21:28

标签: sql-server transactions snapshot serializable

在没有锁定,阻塞或脏/幻读的情况下,使用SNAPSHOT隔离一致地读取数据是否有任何问题,而另一个进程正在处理可序列化事务中的连续传入数据?

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

我已经读过但并不完全清楚同时使用不同隔离级别的影响。我见过lock compatibility matrix,并阅读各种信息。看起来没问题,但我非常感谢有实际经验的人提出的任何重大缺陷的明智指导。

在SERIALIZABLE交易写入时,是否存在使用快照隔离的问题?是否有情况会阻止SERIALIZABLE交易?使用SNAPSHOT与READ COMMITTED(READ_COMMITTED_SNAPSHOT ON)有什么好处?

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

1 个答案:

答案 0 :(得分:4)

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

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