从 READ_COMMITTED_SNAPSHOT 更改默认事务隔离级别为 READ_COMMITTED,我应该期望什么?

3
在SQL Server中,默认的隔离级别是READ_COMMITTED,但在SQL Azure中,默认的隔离级别是READ_COMMITTED_SNAPSHOT
假设我将SQL Azure服务器的默认级别更改为READ_COMMITTED_SNAPSHOT(使用SET TRANSACTION ISOLATION LEVEL),以使其像SQL Server一样工作。
我应该预期什么负面后果?

简短的回答是,你不能在SQL Azure中做到这一点:https://dev59.com/rUvSa4cB1Zd3GeqPczxB - twoleggedhorse
@twoleggedhorse:这不能按数据库完成,但可以按连接完成,不是吗? - sharptooth
1个回答

3

你的应用程序逻辑可能会出现问题。实际上,这取决于你正在做什么。总体而言,有一些指针:

  • 真正的SNAPSHOT比RCSI少了很多“惊喜”。因为在真正的SNAPSHOT中,“快照”行版本在事务开始时就被明确定义了,所以它不会遭受RCSI内部看到不同行版本的问题(这导致非常微妙和难以理解的问题)
  • 你将得到更新冲突而不是死锁,但只有一个确切的“代替”。有一些差异,肯定的是应用程序可能不希望新的错误代码3960。

我建议阅读在SQL Server中实现快照或读取提交的快照隔离:指南


重点是你无法在 SQL Azure 中更改此设置。 - twoleggedhorse
@twoleggedhorse:实际上你可以。http://social.technet.microsoft.com/wiki/contents/articles/handling-transactions-in-sql-azure.aspx - Remus Rusanu
1
@twoleggedhorse:实际上,你是对的。我已经阅读了OP(并回答了这样的问题...),认为是“从RCSI更改为SNAPSHOT”,这是可能的。在Azure中,无法从RCSI更改为“READ COMMITTED”。 - Remus Rusanu
+1 很少有人承认我是对的 - 我会好好享受这个 :) - twoleggedhorse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接