我研究了Server的READ COMMITTED SNAPSHOT和SNAPSHOT隔离级别之间的差异,发现了以下资源:
对于大多数应用程序,建议使用行版本控制进行读提交隔离,而不是快照隔离,原因如下:
我对这些话题有些陌生,但我似乎无法理解上述链接中的两个要点。
发布于 2013-12-08 20:59:09
READ COMMITTED SNAPSHOT在每个语句之后使用一个新快照。这意味着较少的行版本被保存。(您从文档中引用的声明有点误导,因为它表明这始终是正确的--只有在长期运行的SNAPSHOT事务中才是正确的。)快照行版本是在写入时创建的。读取不会影响将哪些内容放入tempdb中。作家不可能预见到将来会发生什么事。读者只影响那些可以被清除的东西。SNAPSHOT事务T1写入另一个事务T2在T1启动和T1尝试写入之间的时间内修改的行时,语句将失败,出现更新冲突错误。这是一个乐观的并发模型。使用READ COMMITTED SNAPSHOT,T1将等待T2释放该行上的X锁并正常继续。发布于 2015-05-13 13:48:33
快照和已提交的快照之间的另一个区别是以下内容。
在第一届会议上
设置TRAN隔离级别快照开始从TB1选择*..
在第二届会议上
更新TB1集名称=名称+ 'test‘,其中id =1
在第一届会议上
从TB1中选择* --这将返回ID = 1的值名称,而不是name + 'test‘提交TRAN
在read提交的快照中,会话1中的第一个select将返回id =1的名称,第二个select将返回name + 'test‘。
因此,在快照隔离中,SQL SERVER在事务开始时执行快照,并在整个事务期间从该快照中读取快照。
在read提交快照中,为事务期间的每个SELECT语句拍摄快照。
https://dba.stackexchange.com/questions/54680
复制相似问题