Таблица 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

Hosted by uCoz