«Когда соединение закрывается и возвращается в пул, уровень изоляции от последнего оператора SET TRANSACTION ISOLATION LEVEL сохраняется»?

8

В сетевой статье MSDN « Изоляция моментальных снимков в SQL Server » говорится:

  • «Уровень изоляции имеет область действия всего соединения, и после установки для соединения с помощью инструкции SET TRANSACTION ISOLATION LEVEL он остается в силе до тех пор, пока соединение не будет закрыто или не будет установлен другой уровень изоляции. Когда соединение закрывается и возвращается в пул , уровень изоляции из последнего оператора SET TRANSACTION ISOLATION LEVEL сохраняется . Последующие соединения, повторно использующие соединение в пуле, используют уровень изоляции, который действовал во время соединения в пул »

Разве это не противоречивый абзац («до» против «оставлено»)?

Затем, если «уровень изоляции от последнего оператора SET TRANSACTION ISOLATION LEVEL сохраняется » после закрытия соединения и его возврата в пул, как это следует понимать:

  • что уровень изоляции по умолчанию будет иметь произвольное значение (разные соединения в пуле будут иметь разные уровни изоляции, и его значение будет зависеть от того, какое соединение повторно открывается)?
  • или все значения по умолчанию для всех соединений в пуле будут изменены на последние? но опять совершенно неизвестно перед рукой?
Fulproof
источник

Ответы:

14

Соединение из пула будет иметь уровень изоляции, установленный последним клиентом, который будет использовать это соединение. Да, это действительно так страшно.

Короче говоря, если вы измените уровень изоляции соединения, вы должны явно установить его обратно READ COMMITTEDперед закрытием. Лучше явно объявить требуемый уровень изоляции в начале любого пакета, чтобы гарантировать, что на ваш код не повлиял кто-то еще неаккуратный, и вернуть его по умолчанию в конце.

Такое поведение, хотя и сбивает с толку, по- видимому, из-за дизайна .

Марк Стори-Смит
источник
Никогда не видел, что «необходимо явно» и «лучше явно» в статьях MSDN, книгах, блогах, документах и ​​т. Д.
Fulproof
5

Разве это не противоречивый абзац («до» против «оставлено»)?

Не для меня, но я вижу, что есть другие способы прочитать это. Если вы хотите, чтобы документация была обновлена, чтобы сделать ее более понятной, надлежащее место, чтобы запросить это, находится в Microsoft Connect . Люди здесь не поддерживают документацию Microsoft.

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

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

или все значения по умолчанию для всех соединений в пуле будут изменены на последние? но опять совершенно неизвестно перед рукой?

Нет.

Пол Уайт 9
источник