首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在READ_COMMITTED_SNAPSHOT关闭时将ALLOW_SNAPSHOT_ISOLATION设置为ON

在READ_COMMITTED_SNAPSHOT关闭时将ALLOW_SNAPSHOT_ISOLATION设置为ON
EN

Database Administration用户
提问于 2018-05-08 10:15:08
回答 1查看 2.8K关注 0票数 6

我试验了Server数据库的各种配置,最终将READ_COMMITTED_SNAPSHOT设置为ON,而ALLOW_SNAPSHOT_ISOLATIONOFF

我注意到当启用这个功能时,许多查询变得更快了。我仍然使用默认的READ COMMITTED隔离级别连接到数据库。

这里到底发生了什么?我认为当ALLOW_SNAPSHOT_ISOLATIONOFF**时,将** READ_COMMITTED_SNAPSHOT设置为ON不会有任何效果.我仍然没有实际使用快照隔离,或者我是吗?有人能解释一下吗?我很困惑。

我试着在网上研究这个话题,但是每当我看到READ_COMMITTED_SNAPSHOT被使用时,它总是和ALLOW_SNAPSHOT_ISOLATION在一起,而我没有启用它。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-05-08 23:36:30

我注意到当启用这个功能时,许多查询变得更快了。我仍然使用默认的READ COMMITTED隔离级别连接到数据库。

注意到这一点:

这些选项是独立的,两者都不需要开启,尽管许多人错误地这样做了。打开任何一个都会引起行版本控制开销。READ_COMMITTED_SNAPSHOT ON使所有READ_COMMITTED会话使用行版本控制而不是锁定,从而避免阻塞,并可能解释您感知到的性能改进。

此外,READ_COMMITTED_SNAPSHOT (此后称为RCSI)只会给您提供一些乐观并发的属性。RCSI和快照(SI)主要有三种不同之处:

  1. 所有RC隔离查询都将立即使用RCSI。
  2. RCSI为单个语句提供了数据库的实时(快照)视图.
  3. SI为整个事务提供了实时视图。
  4. 可以有写冲突。

这里到底发生了什么?

RCSI是打开的,因此所有RC隔离查询都被提升到RCSI,在RCSI中,读取器不阻塞作者,而编写器不阻塞读取器。您所看到的“加速”最有可能是由于对这些查询的等待减少了,因为它现在使用的是乐观并发的版本存储,而不是阻塞和等待。这可能是也可能不是在查询中给出所需的结果。

我认为当ALLOW_SNAPSHOT_ISOLATIONOFF时,将READ_COMMITTED_SNAPSHOT设置为ON不会有任何效果.我仍然没有实际使用快照隔离,或者我是吗?

请参见上面的。您在打开RCSI时使用它(这实际上是打开的),但是SI在打开时不会自动使用:您需要显式地使用SET TRANSACTION ISOLATION LEVEL SNAPSHOT (或等效的)才能使用SI。

有关更多信息,请参见产品文档中的Server数据库引擎中基于行版本的隔离级别

在使用RCSI/SI时,有关某些问题和注意事项的其他有用细节可以在以下文章中找到:

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/206125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档