Я понимаю, что уровень изоляции Serializable является самым ограничивающим из всех уровней изоляции. Мне любопытно, какие приложения потребуют такого уровня изоляции или когда я должен его использовать?
Уровень изоляции - Сериализуемый. Когда я должен использовать это?
Ответ 1
Задайте себе следующий вопрос: было бы плохо, если бы кто-то ввел INSERT новую строку в ваши данные во время вашей транзакции? Будет ли это мешать вашим результатам недопустимым образом? Если это так, используйте уровень SERIALIZABLE.
Из MSDN относительно УРОВНЯ ИЗОЛЯЦИИ SET TRANSACTION:
SERIALIZABLE
Устанавливает блокировку диапазона в наборе данных, предотвращение обновления другими пользователями или вставка строк в набор данных пока транзакция не будет завершена. Это наиболее ограничивает четыре уровня изоляции. Потому как concurrency ниже, используйте эту опцию только при необходимости. Этот вариант тот же эффект, что и установка HOLDLOCK на все таблицы во всех операторах SELECT в транзакция.
Таким образом, ваша транзакция поддерживает все блокировки на протяжении всей своей жизни - даже те, которые обычно отбрасываются после использования. Это означает, что все транзакции работают по одному, поэтому имя SERIALIZABLE. Примечание от Википедия относительно уровней изоляции:
SERIALIZABLE
Этот уровень изоляции указывает, что все транзакции происходят полностью изолированная мода; то есть, как если бы все транзакции в системе выполняется последовательно, один после Другие. СУБД может выполнять два или больше транзакций одновременно только если иллюзия серийного выполнение может быть сохранено.
Ответ 2
Попробуйте выполнить учет. Транзакции в счетах по сути сериализуемы, если вы хотите иметь правильные значения учетной записи и придерживаться таких вещей, как кредитные лимиты.
Ответ 3
SERIALIZABLE
изоляции SERIALIZABLE
- это самый высокий уровень изоляции, основанный на пессимистическом контроле параллелизма, когда транзакции полностью изолированы друг от друга.
Стандарт ANSI/ISO SQL 92 охватывает следующие явления чтения, когда одна транзакция читает данные, которые изменяются второй транзакцией:
- грязное чтение
- неповторяемые чтения
- фантомное чтение
и документация Microsoft дополняется следующими двумя:
- потерянные обновления
- пропущенные и двойные чтения, вызванные обновлениями строк
В следующей таблице показаны побочные эффекты параллелизма, включаемые различными уровнями изоляции:
Итак, вопрос в том, какие явления чтения разрешены вашими бизнес-требованиями, а затем проверить, может ли ваша аппаратная среда поддерживать более строгий контроль параллелизма?
Обратите внимание: что-то очень интересное в SERIALIZABLE
изоляции SERIALIZABLE
- это уровень изоляции по умолчанию, определенный стандартом SQL. Разумеется, в контексте SQL Server по умолчанию используется READ COMMITTED
.
Кроме того, официальная документация о Transaction Locking и Row Versioning Guide - отличное место, где освещается и объясняется множество аспектов.