вторник, 5 июля 2011 г.

MSSQL : Уровни изоляции в MS SQL - READ UNCOMMITTED

READ UNCOMMITTED
Уровень изоляции READ UNCOMMITTED позволяет читать данные, измененные другими транзакциями, но еще не зафиксированными. Транзакции, запущенные с таким уровнем изоляции, не блокируют строки/объекты с которыми оперируют. Чтение в таком режиме также носит название "грязное чтение".
Так как READ UNCOMMITTED не блокирует доступ к своим объектам и может работать с заблокированными объектами, то может возникнуть ситуация, когда данные будут то появляться, то исчезать.

Откроем теперь 3 окна запроса
в 1-м окне введем:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED
GO
BEGIN TRANSACTION

select * from t1

update t1
set textdata = 'thread 1'

select * from t1
GO
во 2-м окне
SET TRANSACTION ISOLATION LEVEL READ COMMITED
GO
BEGIN TRANSACTION

select * from t1

update t1
set textdata = 'thread 2'

select * from t1

COMMIT TRANSACTION
GO

в 3-м окне:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED
GO
BEGIN TRANSACTION

select * from t1

update t1
set textdata = 'thread 3'

select * from t1

COMMIT TRANSACTION
GO
Запустите первый пакет, потом 2-й и 3-й.
Мы увидим, что если в 1-м пакете не закрыта транзакция, то 2-й и 3-й пакеты будут ожидать закрытия, но ожидать они будут в разных точках.
2-й пакет будет ожидать чтения (1-й select)
3-й пакет будет ожидать записи/обновления

Комментариев нет: