我有点难以找出SNAPSHOT和SNAPSHOT READ COMMITTED之间的区别? READ COMMITTED是一种悲观的并发方法,它如何应用于乐观并发?在这种情况下,在SNAPSHOT隔离级别
谢谢你,非常感谢一些启发
答案 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。