Сравнение настроек базы данных SQL Server с уровнями изоляции
За последние несколько лет мы заметили увеличение числа взаимоблокировок и длительных транзакций в нашей базе данных SQL Server (2008r2). В настоящее время мы запускаем нашу базу данных со следующими настройками ALLOW_SNAPSHOT_ISOLATION OFF
а также READ_COMMITTED_SNAPSHOT OFF
, Блокировки тупика управляются из кода с использованием процесса повторных попыток / ожидания.
Наш код приложения (C#) создает SqlConnection
используя конструктор по умолчанию (от декомпиляции IsolationLevel.Unspecified
) который, я считаю, позволяет SQL делать свое дело, которое в нашем случае будет таким же, как READ COMMITTED
(Я думаю).
Мы собираемся представить снимки, установив ALLOW_SNAPSHOT_ISOLATION ON
а также READ_COMMITTED_SNAPSHOT ON
и переопределить конструктор C# с RepeatableRead
, Я считаю, что эта комбинация настроек позволит нашему коду функционировать так же, как и сейчас. Это позволит нам постепенно оценить нашу кодовую базу, чтобы убедиться, что изменение уровня изоляции и моментальных снимков не оказывает негативного влияния на то, как мы воспринимаем процедуры SQL в настоящее время. Нам, конечно, нужно добавить SET TRANSACTION ISOLATION LEVEL SNAPSHOT
в начале любой процедуры, которую мы хотим извлечь из снимка (чтобы переопределить настройку C# IsolationLevel.RepeatableRead
).
Причиной такой обработки является то, что две настройки базы данных по существу вынуждают нас переводить нашу базу данных в автономный режим, что требует окна обслуживания, и мы хотели бы подготовиться к постепенным изменениям, но хотели бы, чтобы код продолжал выполнять то же, что и сейчас. сразу после изменений.
Я просто ищу подтверждение того, что мое понимание верно. Если я не прав, что мне нужно сделать после внесения 2 изменений в базу данных, чтобы смоделировать нашу текущую рабочую среду?