加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – ALLOW_SNAPSHOT_ISOLATION和READ_COMMITTED_SNAPS

发布时间:2020-12-12 06:19:43 所属栏目:MsSql教程 来源:网络整理
导读:大多数论坛和在线示例总是建议在有人询问快照,行版本控制或类似问题时将ALLOW_SNAPSHOT_ISOLATION和READ_COMMITTED_SNAPSHOT设置为ON. 我猜两个设置中的SNAPSHOT这个词有点令人困惑.我认为,为了使数据库引擎使用行版本控制而不是用于READ_COMMITTED默认行为的
大多数论坛和在线示例总是建议在有人询问快照,行版本控制或类似问题时将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语句如何返回完全不同且意外的结果的示例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读