0

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

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

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

以这种方式处理它的原因是这两个数据库设置本质上迫使我们使我们的数据库脱机,这需要一个维护窗口,我们希望准备进行渐进式更改,但希望代码继续执行原样更改后立即生效。

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

4

0 回答 0