Основные понятия реляционной модели данных. Потенциальные ключи отношений, страница 12

В некоторых системах нет разделения на типы блокировок, т.е. каждая блокировка является исключительной. Если транзакция должна вначале считать некоторый объект, а затем изменить его, то транзакция может запрашивать либо только исключительную группировку, либо может начиналь с разделяемой группировки, а затем переходить к исключительной группировке.В этом случае в механизме блокировки предполагается существование дополнительного примитива, который называется lock_escalation.

Менеджер блокировок получает запросы на блокировки от различных транзакций и может разрешить блокировку или не разрешить, это зависит от группировок, которые были наложены другими транзакциями. Если группировка не разрешена, то соответствующая транзакция переходит в состояние ожидания. Если блокировка выходит из состояния ожидания, в том случае если ресурс, который она запрашивает, освобожден. Все разрешенные блокирвки хранятся в таблице блокировок log table, которая обрабатывается менеджером группы.

Менеджер блокировок удовлетворяет запрос на блокировку или отклоняет его, на основании следующей таблицы, которая называется таблицей конфликтов блокировок.

Запрос

Состояние ресурса

free

r_locked

w_locked

r_lock

OK/r_locked

OK/r_locked

No/w_locked

w_lock

OK/w_locked

No/r_locked

No/w_locked

unlock

-

OK/depends

OK/free

Для того, чтобы гарантировать, что транзакции (особенно параллельнае) приводят к такому же рузультату, что и при последовательном выполнении, должно выполняться следующее требование, налагаемое на порядок запросов на блокировку. Это требование или ограничение называется двухфазной блокировкой. Иребование формулируется слЕДУЮЩИМ ОБРАЗОМ: после снятия блокировки транзакция не может запрашивать блокировку.

В транзакции можно выделить две фазы:

1)  во время первой фазы транзакция запрашивает ресурсы или налагает блокировку на ресурсы.

2)  во время второй фазы ресурсы освобождаются.

Протокол двухфазной блокировки:

Надпись: запрашиваемые ресурсы


              

Пример решения проблемы фантомных изменений.

t1

t2

x

y

z

bot

free

free

free

r_lock1(x)

1: read

r1(x)

bot

w_lock2(y)

2:write

r2(y)

r_lock1(y)

1:wait

y = y-100

w_lock2(z)

2:write

r2(z)

z = z+100

w2(y)

w2(z)

commit

unlock2(y)

1:read

r1(y)

r_lock1(z)

1:wait

unlock2(z)

1:read

r1(z)

eot

commit

unlock1(x)

free

unlock1(y)

free

unlock1(z)

free

eot