Банки и базы данных |
Тема 8. Управление параллельным доступом |
назад | оглавление | вперёд |
Параллельный
доступ - это ситуация, возникающая когда несколько транзакций обращаются
к одним данным одновременно. Проблема доступа в том, что необходима полная изолированность
пользователей.
Изолированность
- это создание иллюзии, что каждый пользователь работает с БД самостоятельно.
3 уровня изолированности пользователей:
Отсутствие потерянных изменений
Транзакция1 |
Транзакция2 |
READ A A=A+1 WRITE A COMMIT |
READ A A=A+1 ROLLBACK |
ROLLBACK
из второй транзакции откатит и изменения, сделанный первой транзакцией.
До завершения транзакции1
нельзя менять объект, с которым работает транзакция
Отсутствие чтения “грязных” данных
Транзакция1 |
Транзакция2 |
READ A A=A+1 WRITE A ROLLBACK |
. . . . . . . . . READ A A=A-1 |
Никакая транзакция не должна читать объект до завершения изменений.
Отсутствие неповторяющихся чтений
Транзакция1 |
Транзакция2 |
READ A A=A+1 WRITE A
|
READ A A=A-1 . . . WRITE A |
Средства управления транзакциями: блокировки и метод временных меток.
Блокировки.
Блокировка-
запрет на доступ к ресурсу. Заблокировать можно поле, кортеж, отношение, группу
отношений или всю базу данных.
LOCK A - заблокировать
ресурс А
UNLOCK A - разблокировать
ресурс А
Совместимость блокировок.
запись объекта |
Чтение объекта |
запись части объекта |
чтение части объекта |
чтение/запись части объекта |
|
запись объекта |
нет |
Нет |
нет |
нет |
Нет |
чтение объекта |
нет |
Да |
нет |
да |
Нет |
запись части объекта |
нет |
Нет |
да |
да |
Да |
чтение части объекта |
нет |
Да |
нет |
да |
Да |
чтение/запись части объекта |
нет |
Нет |
нет |
да |
Нет |
Проблемы, вызванные блокировками.
1. “Бесконечное ожидание”
Транзакция1 |
Транзакция2 |
Транзакция3 |
LOCK A . . . . . . UNLOCK A . . . LOCK A |
. . . . . . . . . LOCK A |
. . . . . . . . . LOCK A . . . UNLOCK A |
Если приоритет второй транзакции мал, то она ждать будет долго.
Решения:
2.Тупики (DeadLock)
Транзакция1 |
Транзакция2 |
LOCK A . . . LOCK B . . . . . . |
LOCK B . . . LOCK A . . . . . . |
Дойдя до этого места, транзакции войдут в тупик, ожидая друг друга.
Способы обнаружения тупиков:
При обнаружении подобной структуры выбирается транзакция с наименьшим приоритетом и она снимается.
Способы предупреждения тупиков:
Двухфазный протокол:
Все операции LOCK должны предшествовать операциям UNLOCK.
Транзакция1 |
Транзакция2 |
LOCK A LOCK B ….. LOCK C ….. UNLOCK A ….. |
LOCK C ….. UNLOCK C …… ……
|
Метод временных меток.
Транзакция, обращаясь к объекту, ставит флаг, указывающий время обращения к объекту и операцию. Если флаг уже есть, а операции конфликтуют, то более старая транзакция снимается.
назад | оглавление | вперёд