Таблица 7.6. Значения перечисления IsolationLevel
| Значение | Описание |
|---|---|
| ReadUncommitted |
Никаких разделяемых блокировок и никаких исключительных блокировок.
Этот тип уровня изоляции подходит, когда вы хотите работать со всеми
данными, соответствующими определенным условиям, независимо от
того, были ли они зафиксированы. Возможно недействительное чтение,
но производительность растет. |
| ReadCommitted |
Разделяемые блокировки удерживаются, пока данные читаются
транзакцией. Это исключает случаи недействительного чтения, но данные могут
быть изменены до завершения транзакции. Это может привести к
неповторяемым чтениям или фантомным записям. Это — уровень изоляции,
который SQL Server использует по умолчанию. |
| RepeatableRead |
В этом случае разделяемые блокировки устанавливаются на все записи, использованные в запросе. Это предотвращает модификацию данных
другими клиентами, а также предотвращает неповторяющиеся чтения.
Однако фантомные записи возможны. |
| Serializable | Блокировка диапазона, устанавливаемая на используемые данные,
предотвращает обновление и вставку другими пользователями записей,
которые могут попасть в диапазон. Это единственные уровень изоляции,
который исключает возможность фантомных строк. Однако оказывает
исключительно негативное влияние на возможность параллельной
работы пользователей, и редко используется в сценариях работы с многими
пользователями. |
| Snapshot | Сохраняет копию данных, к которым обращается транзакция. В
результате транзакция не может видеть изменений, выполненных другими
транзакциями. Этот подход ограничивает блокировки, поскольку даже если
другие транзакции удерживают блокировки на этих данных, транзакция с
таким уровнем изоляции будет способна читать копии данных. Этот
уровень изоляции поддерживается только в SQL Server 2005, и должен быть
включен на уровне опций базы данных. |
Таблица 7.7. Сравнение уровней изоляции
| Уровень изоляции | Недействительное чтение |
Неповторяющееся чтение | Фантомные данные | Параллелизм |
|---|---|---|---|---|
| ReadUncommitted |
Да | Да | Да | Лучший |
| ReadCommitted |
Нет | Да | Да | Хороший |
| RepeatableRead | Нет | Нет | Да | Слабый |
|
Serializable |
Нет | Нет | Нет | Очень слабый |
Всякий раз, когда вы откатываете транзакцию, она аннулирует результаты всех команд, выполненных с момента старта транзакции. Но как быть, если вы хотите откатить только часть текущей транзакции? SQL Server справляется с этим с помощью средства, называемого точками сохранения (savepoints).
Точки сохранения — это метки, которые работают, подобно книжным закладкам. Вы отмечаете определенную точку в потоке транзакции, и затем можете выполнить ее откат до этой точки. Точка сохранения устанавливается методом Transaction.Save(). Обратите внимание, что метод Save() доступен только в классе SqlTransaction, поскольку не является частью стандартного интерфейса IDbTransaction.
предыдущая следующая страница оглавление
330