Поиск уровня изоляции по умолчанию в SQL Server 2017 и Azure SQL DB

9

Я читаю книгу, связанную с транзакциями и параллелизмом. В одном абзаце упоминается, что:

  • В локальном экземпляре SQL Server уровнем изоляции по умолчанию является Read-Committed на основе блокировки

И следующее предложение:

  • По умолчанию в базе данных SQL - Чтение - зафиксированный снимок на основе контроля версий строк

Мой вопрос: в чем разница между «локальным экземпляром SQL Server» и «базой данных SQL» в этих двух предложениях?

Что такое уровень изоляции по умолчанию и как его найти? Есть ли специальный запрос, чтобы узнать уровень изоляции по умолчанию?

Эрик Дарлинг
источник

Ответы:

13

Это относится к базе данных SQL Azure, которая по умолчанию использует RCSI .

Уровень изоляции SQL

Настройка по умолчанию для всей базы данных - включить изоляцию моментального снимка при чтении (RCSI), установив для параметров базы данных READ_COMMITTED_SNAPSHOT и ALLOW_SNAPSHOT_ISOLATION значение ON, подробнее об уровнях изоляции здесь . Вы не можете изменить уровень изоляции базы данных по умолчанию. Однако вы можете явно контролировать уровень изоляции в соединении.

В локальном SQL Server уровнем изоляции по умолчанию является Read Committed.

Найти уровень изоляции «по умолчанию» - это немного погоня. Это будет зависеть от базы данных, из которой инициируется запрос, и от того, существуют ли в запросе какие-либо подсказки для переопределения параметра уровня базы данных.

Тем не менее, вы можете запросить, sys.databasesчтобы узнать, включен ли RCSI или SI.

SELECT d.name, 
       d.is_read_committed_snapshot_on, 
       d.snapshot_isolation_state
FROM sys.databases AS d;

Обратите внимание, что READ_COMMITTED_SNAPSHOTтехнически это не уровень изоляции. Скорее, это опция базы данных, которая контролирует реализацию, так что управление версиями строк вместо блокировок используется для обеспечения согласованности чтения для сеансов с использованием READ_COMMITTEDуровня изоляции.

Эрик Дарлинг
источник