首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打开ALLOW_SNAPSHOT_ISOLATION有什么缺点吗?

打开ALLOW_SNAPSHOT_ISOLATION有什么缺点吗?
EN

Stack Overflow用户
提问于 2017-08-29 17:30:37
回答 3查看 1.4K关注 0票数 0

我们的数据库目前正在遇到阻塞、死锁和超时问题,我们正在缓慢地着手解决这些问题。我遇到了快照隔离级别的概念。我认为我们的应用程序还没有准备好阅读,但我确实认为ALLOW_SNAPSHOT_ISOLATION被打开了,某些带有set transaction isolation level snapshot标志的有问题的查询可能会有很大的帮助。在使用read提交快照启用时,有各种各样的警告需要进行测试,我理解其中的原因,但我只想检查一下打开ALLOW_SNAPSHOT_ISOLATION是否有任何问题。在我看来,没有任何东西会神奇地切换到使用快照隔离级别,就像读取提交的快照启用一样。如果我们将隔离级别设置为继续进行快照,只会影响查询/sprocs/etc。有人能确认或否认吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-29 22:21:56

打开ALLOW_SNAPSHOT_ISOLATION (或READ_COMMITTED_SNAPSHOT)数据库选项的缺点是为所有数据库事务维护行版本的额外开销。开销包括在tempdb中维护行版本存储和每行额外的14字节存储。这种开销在数据库引擎中基于行版本的隔离级别中有详细说明。

即使您不实际使用SNAPSHOT隔离,Server仍将在启用ALLOW_SNAPSHOT_ISOLATION的数据库中维护行版本,以防启动SNAPSHOT。行版本控制开销的总体性能和存储影响在很大程度上取决于您的工作负载和环境。它可能没有那么重要,可以阻止您使用SNAPSHOT隔离,但是您需要进行测试以确定对您的情况的影响。当然,并发性的好处可能会抵消成本。

票数 2
EN

Stack Overflow用户

发布于 2017-08-29 17:46:15

它将消除读写之间的所有阻塞。但是,如果在同一页上同时发生两次写操作,仍然会发生阻塞。这是无可奈何的。

在我的经验中,由于快照隔离(行版本控制)而增加的负载是微不足道的,行版本控制在减少阻塞读取器方面的好处也是巨大的。

票数 0
EN

Stack Overflow用户

发布于 2021-06-16 15:18:32

启用快照隔离时,将将旧行版本保存在tempdb中,直到可以使用它们的事务完成为止。因此,如果您意外地打开了一个事务,tempdb可以填充直到灾难发生。

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

https://stackoverflow.com/questions/45945067

复制
相关文章

相似问题

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