隔离级别差异,SNAPSHOT和SNAPSHOT读取提交的快照?

时间:2018-05-02 07:16:36

标签: sql-server isolation-level

我有点难以找出SNAPSHOT和SNAPSHOT READ COMMITTED之间的区别? READ COMMITTED是一种悲观的并发方法,它如何应用于乐观并发?在这种情况下,在SNAPSHOT隔离级别

谢谢你,非常感谢一些启发

2 个答案:

答案 0 :(得分:3)

这两个名字都令人不安地误导了。

在SQL Server术语中,SNAPSHOT和SNAPSHOT READ COMMITTED都是隔离级别,也是一种实现方式 SQL Server如何完成并发数据访问的隔离。

主要区别:在SNAPSHOT可重复读取和幻像读取被阻止,而在SNAPSHOT READ COMMITTED级别,您可能会遇到不可重复的读取,并且您可能会遇到幻像读取。

换句话说,SNAPSHOT是一个比SNAPSHOT READ COMMITTED更高更强的隔离度。

关于隔离级别:SNAPSHOT与SERIALIZABLE等效,SNAPSHOT READ COMMITTED等效于READ COMMITTED。然而,实施是不同的。虽然SNAPSHOT和SNAPSHOT READ COMMITTED使用记录版本,但另一方面SERIALIZABLE和READ COMMITTED使用阻塞语义来强制阻止并发进程到更改(或读取)资源,而第一个资源完成其事务。

我认为并发和事务隔离很难理解,并且(几乎总是)将它与乐观/悲观隐喻混合在一起会更加强化理解而不是帮助。

答案 1 :(得分:1)

读取已提交

这是默认的隔离级别。用共享的读锁实现。

读取已提交的快照

与提交读操作相同的隔离级别,但是使用行版本控制/ MVCC来实现。优点是writers don't block readers。有人认为这应该是默认设置。请注意,从某种意义上说,它是相同的隔离级别,可以避免相同的异常。

快照

更强的隔离级别,允许fewer anomalies