Сравнение настроек базы данных SQL Server с уровнями изоляции - PullRequest
0 голосов
/ 08 мая 2018

За последние несколько лет мы заметили увеличение числа взаимоблокировок и длительных транзакций в нашей базе данных 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).

Причина такой обработки заключается в том, что две настройки базы данных по сути вынуждают нас переводить нашу базу данных в автономный режим, что требует окна обслуживания, и мы хотели бы подготовиться к постепенным изменениям, но хотели бы, чтобы код продолжал выполнять то же самое как это сразу же после изменений.

Я просто ищу подтверждение того, что мое понимание верно. Если я не прав, что мне нужно сделать после внесения изменений в базу данных, чтобы имитировать нашу текущую рабочую среду?

...