SQL Server数据库设置与隔离级别的比较

时间:2018-05-08 13:01:48

标签: sql-server sqlconnection isolation-level snapshot-isolation read-committed-snapshot

在过去几年中,我们注意到SQL Server(2008r2)数据库中死锁和长时间运行事务的数量有所增加。我们目前使用以下设置ALLOW_SNAPSHOT_ISOLATION OFFREAD_COMMITTED_SNAPSHOT OFF运行我们的数据库。使用重试/等待过程从代码管理死锁。

我们的应用程序代码(c#)使用默认构造函数(从反编译似乎是SqlConnection)创建IsolationLevel.Unspecified我相信它允许SQL自己做的事情,在我们的例子中将是与READ COMMITTED相同(我认为)。

我们希望通过设置ALLOW_SNAPSHOT_ISOLATION ONREAD_COMMITTED_SNAPSHOT ON并使用RepeatableRead覆盖c#构造函数来介绍快照。我相信这种设置组合将使我们的代码能够像现在一样运行。这将允许我们零碎地评估我们的代码库,以确保隔离级别和快照的更改不会对我们如何感知当前正在运行的SQL过程产生负面影响。当然,我们需要将SET TRANSACTION ISOLATION LEVEL SNAPSHOT添加到我们想要从快照中受益的任何过程的开头(以覆盖IsolationLevel.RepeatableRead的c#设置。)

以这种方式处理它的原因是两个数据库设置基本上迫使我们使数据库脱机,这需要一个维护窗口,我们希望准备进行逐步更改但希望代码继续执行相同的操作因为它会立即跟随变化。

我只是在寻找一些确认,我的理解是正确的。如果我错了,为了模拟我们当前的工作环境,在进行2次数据库更改后,我需要做些什么?

0 个答案:

没有答案