Уровень изоляции в C # или SQL - какой будет использоваться? - PullRequest
5 голосов
/ 21 мая 2019

Я установил уровень изоляции в коде C # как readcommitted, и я вызываю хранимую процедуру, которая по какой-то причине истекает по времени.Хранимая процедура не имеет оператора set isolation level.

В SQL Server уровень изоляции на уровне базы данных представляет собой моментальный снимок для фиксации чтения.

Так какой уровень изоляции будет использоваться?Тот, который определен в SQL Server, или тот, который установлен из C #?

Ответы [ 2 ]

3 голосов
/ 21 мая 2019

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

READ_COMMITTED_SNAPSHOT { ON | OFF } ON Включает параметр моментального снимка для чтения на уровне базы данных.Когда он включен, операторы DML начинают генерировать версии строк, даже когда ни одна транзакция не использует изоляцию моментальных снимков.Как только эта опция включена, транзакции, указывающие уровень изоляции зафиксированного чтения, используют управление версиями строк вместо блокировки.

Таким образом, когда READ_COMMITTED_SNAPSHOT включен, транзакция с указанным уровнем изоляции фиксированного чтения вместо этого увидит снимокуровень изоляции.

Важно понимать, что существует другая опция базы данных: ALLOW_SNAPSHOT_ISOLATION, что также должно быть установлено в ON для возникновения изоляции моментального снимка.См. Изоляция моментального снимка в SQL Server .

В случае сомнений всегда можно проверить sys.dm_tran_current_transaction, в котором есть столбец с именем transaction_is_snapshot:

Состояние изоляции снимка.Это значение равно 1, если транзакция запущена в режиме изоляции моментального снимка.В противном случае значение равно 0.

Кроме того, существуют незначительные различия между истинным уровнем изоляции моментального снимка и изоляцией подтвержденного чтения, которая изменяется на снимок с помощью READ_COMMITTED_SNAPSHOT.

0 голосов
/ 21 мая 2019

Команды для установки уровня изоляции транзакции обрабатываются в полученном порядке. Так что последний побеждает. На SQL Server вы можете установить уровень изоляции транзакции по умолчанию, но это просто значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...