sql-server – ALLOW_SNAPSHOT_ISOLATION和READ_COMMITTED_SNAPSHOT

前端之家收集整理的这篇文章主要介绍了sql-server – ALLOW_SNAPSHOT_ISOLATION和READ_COMMITTED_SNAPSHOT前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
大多数论坛和在线示例总是建议在有人询问快照,行版本控制或类似问题时将ALLOW_SNAPSHOT_ISOLATION和READ_COMMITTED_SNAPSHOT设置为ON.

我猜两个设置中的SNAPSHOT这个词有点令人困惑.我认为,为了使数据库引擎使用行版本控制而不是用于READ_COMMITTED默认行为的锁,数据库READ_COMMITTED_SNAPSHOT设置为ON,而不管ALLOW_SNAPSHOT_ISOLATION设置是什么.

无论READ_COMMITTED_SNAPSHOT设置如何,ALLOW_SNAPSHOT_ISOLATION设置仅设置为ON以允许在启动事务时进行快照隔离(例如,SET TRANSACTION ISOLATION LEVEL SNAPSHOT).

将这两个设置设置为ON的唯一原因是它需要具有READ COMMITTED行版本控制和快照隔离.

我的问题是,我的理解在某种程度上是不正确的吗?并且这两个设置必须始终一起设置为ON(特别是对于READ COMMITTED行版本控制)?

解决方法

你的理解是正确的.它确实有点令人困惑.

Kim Tripp(sql Server的程序员之一,也是sqlSkills的一个组成部分)完全按照您在MCM videos on Snapshot Isolation中所述的内容进行操作.在视频中快速前往41:45,以便找到她回答问题的部分.

如果您使用ALLOW_SNAPSHOT_ISOLATION,请确保在代码中使用SET TRANSACTION ISOLATION LEVEL SNAPSHOT,否则您将无法获得任何好处.

如果将SET READ_COMMITTED_SNAPSHOT设置为ON,则无需修改任何代码. MS sql Server自动为该表应用快照隔离.

我没有测试过如果你在代码中要求不同的隔离级别会发生什么,我怀疑它会覆盖这个选项但是先测试它.

A quick look at performance overhead using Snapshot Isolation.

Good article on how snapshot isolation can change the expected behavior of your app.它显示了update语句和select语句如何返回完全不同且意外的结果的示例.

猜你在找的MsSQL相关文章