首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RCSI使用的空间比快照少还是相同?为什么?

RCSI使用的空间比快照少还是相同?为什么?
EN

Database Administration用户
提问于 2013-12-13 08:35:34
回答 1查看 383关注 0票数 7

试图更好地理解SQL Server中基于行版本控制的事务隔离- RCSI (读取提交快照隔离和快照)。

MSDN在线文章"选择基于行版本控制的隔离级别“指出:

  • *“对于大多数应用程序,建议使用行版本控制进行读提交的隔离,而不是快照隔离,原因如下:
    • 它比快照隔离占用更少的tempdb空间“*

这与Neal的“基于Server 2005行版本的事务隔离”中金伯利·L·特里普的声明相矛盾:

  • “在使用行Versioning__对使用行版本控制在读提交下运行的查询进行行版本控制时,行版本仅在事务中的每个SELECT语句的持续时间内才需要使用。但是,行版本将一直保持到事务结束。这是对tempdb存储的一个重要考虑点。存储影响将与快照isolation.__的影响相同。”

那么,为什么RCSI使用较少(或相同)的空间?

更新:

也许我把原来的问题表述得很糟糕,但这意味着对两个相互矛盾的“理论”都有RTFM的解释和证实,我想了解:

哪个是对的?

为什么这个真的是对的呢?

为什么另一个错误不是真的(为什么是另一个错误?)

SUBQUESTION:

如果在单个事务中对同一记录进行多次更新,将存储多少版本?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2013-12-13 14:38:55

读取提交的快照隔离(语句级快照隔离)可能比快照隔离(事务级快照隔离)使用更少的存储空间,因为通常在生成行版本后的一段时间内不需要行版本。

对于事务级快照隔离,版本必须在事务的整个持续时间内停留,这可能是相当长的时间(或相当长的时间,如这里所见)。当然,语句也可以运行很长时间,但通常情况下,事务将花费更长的时间。

为了强调这一点:在快照隔离下运行的事务可以看到事务开始时存在的提交数据。这意味着必须维护行版本,直到整个事务完成。如果在RCSI下运行相同的事务,则可以在每个语句之后释放行版本。总之,在相同的工作负载上,快照隔离会导致比RCSI更大的版本存储大小。

在启用任何一个或两个设置时都会生成相同的版本。我相信金伯利指的是在写率意义上的存储影响,而不是使用的存储,所以你提到的这两种说法并不矛盾,只是有点不明确或不明确。

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

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

复制
相关文章

相似问题

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