Подтвердить что ты не робот

Уровень изоляции - Сериализуемый. Когда я должен использовать это?

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

4b9b3361

Ответ 1

Задайте себе следующий вопрос: было бы плохо, если бы кто-то ввел INSERT новую строку в ваши данные во время вашей транзакции? Будет ли это мешать вашим результатам недопустимым образом? Если это так, используйте уровень SERIALIZABLE.

Из MSDN относительно УРОВНЯ ИЗОЛЯЦИИ SET TRANSACTION:

SERIALIZABLE

Устанавливает блокировку диапазона в наборе данных, предотвращение обновления другими пользователями или вставка строк в набор данных пока транзакция не будет завершена. Это наиболее ограничивает четыре уровня изоляции. Потому как concurrency ниже, используйте эту опцию только при необходимости. Этот вариант тот же эффект, что и установка HOLDLOCK на все таблицы во всех операторах SELECT в транзакция.

Таким образом, ваша транзакция поддерживает все блокировки на протяжении всей своей жизни - даже те, которые обычно отбрасываются после использования. Это означает, что все транзакции работают по одному, поэтому имя SERIALIZABLE. Примечание от Википедия относительно уровней изоляции:

SERIALIZABLE

Этот уровень изоляции указывает, что все транзакции происходят полностью изолированная мода; то есть, как если бы все транзакции в системе выполняется последовательно, один после Другие. СУБД может выполнять два или больше транзакций одновременно только если иллюзия серийного выполнение может быть сохранено.

Ответ 2

Попробуйте выполнить учет. Транзакции в счетах по сути сериализуемы, если вы хотите иметь правильные значения учетной записи и придерживаться таких вещей, как кредитные лимиты.

Ответ 3

SERIALIZABLE изоляции SERIALIZABLE - это самый высокий уровень изоляции, основанный на пессимистическом контроле параллелизма, когда транзакции полностью изолированы друг от друга.

Стандарт ANSI/ISO SQL 92 охватывает следующие явления чтения, когда одна транзакция читает данные, которые изменяются второй транзакцией:

  • грязное чтение
  • неповторяемые чтения
  • фантомное чтение

и документация Microsoft дополняется следующими двумя:

  • потерянные обновления
  • пропущенные и двойные чтения, вызванные обновлениями строк

В следующей таблице показаны побочные эффекты параллелизма, включаемые различными уровнями изоляции:

enter image description here

Итак, вопрос в том, какие явления чтения разрешены вашими бизнес-требованиями, а затем проверить, может ли ваша аппаратная среда поддерживать более строгий контроль параллелизма?

Обратите внимание: что-то очень интересное в SERIALIZABLE изоляции SERIALIZABLE - это уровень изоляции по умолчанию, определенный стандартом SQL. Разумеется, в контексте SQL Server по умолчанию используется READ COMMITTED.

Кроме того, официальная документация о Transaction Locking и Row Versioning Guide - отличное место, где освещается и объясняется множество аспектов.