Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiNovye.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.92 Mб
Скачать

Поведение параллельных транзакций

Чтобы лучше понять действие каждого уровня изолированности, рассмотрим сначала три типа поведения параллельно выполняемых транзакций:

  • грязное чтение (Dirty Read) – транзакция Т1 модифицировала некий элемент данных, после чего другая транзакция Т2 прочитала содержимое этого элемента данных до завершения транзакции Т1; Если Т1 завершается операцией ROLLBACK, то получается, что транзакция Т2 прочитала не существующие данные;

  • размытое чтение (Fuzzy Read) – транзакция Т1 прочитала содержимое элемента данных; после чего другая транзакция Т2 модифицировала этот элемент; если Т1 прочитает содержимое этого элемента заново, то она получит другое значение;

  • фиктивные элементы (Phantom) – транзакция Т1 прочитала содержимое нескольких элементов данных, удовлетворяющих некому условию; После этого Т2 создала элемент данных, удовлетворяющий этому условию и зафиксировалась; Если Т1 повторит чтение с тем же условием, она получит другой набор данных.

В таблице 11.1 приводится список типов поведения, которые допускаются на каждом уровне изолированности. Как можно видеть из таблицы, уровень read uncommitted является наименее ограничивающим уровнем изолированности, а serializable – наиболее ограничивающим. Как уже отмечалось, read committed является в SQL Server принятым по умолчанию уровнем изолированности. По мере роста уровня изолированности SQL Server налагает всё более ограничивающую блокировку на всё более длительные периоды времени. И, как отмечалось, уровень изолированности влияет на блокирующее поведение операторов SELECT, а это означает, что изолированность влияет на режим блокировки, применяемый к читаемым данным.

таблица 11.1.

Уровни изоляции транзакций

Уровень изоляции

Грязное чтение

Размытое чтение

Фантом

Незафиксированное чтение (READ UNCOMMITTED)

возможно

возможно

возможно

Зафиксированное чтение (READ COMMITED)

невозможно

возможно

возможно

Повторяемое чтение (REPEATABLE READ)

невозможно

невозможно

возможно

Сериализуемость (SERIALIZABLE)

невозможно

невозможно

невозможно

Задание уровня изолированности

Уровень изолированности транзакций можно задава для всего сеанса пользователя SQL Server, с помощью операторов T-SQL или с помощью функций в отдельном приложении. Чтобы задать уровень изолированности с помощью T-SQL, используется оператор SET TRANSACTION ISOLATION LEVEL и задаётся один из четырёх уровней изолированности. Используется следующий синтаксис:

SET TRANSACTION ISOLATION LEVEL

{READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

После этого все последующие транзакции в этом сеансе SQL Server будут осуществлять блокировку, обеспечивающую этот уровень изолированности. Чтобы определить, какой уровень изолированности SQL Server применяется в данный момент по умолчанию, используется команда DBCC USEROPTIONS.

Результаты оператора DBCC USEROPTIONS приведены на рис. 11.1.

рис. 11.1. Результаты оператора DBCC USEROPTIONS

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]