Протокол Two-Phase Locking (2PL) управляет доступом к данным в базе данных, обеспечивая их корректность и изоляцию между транзакциями. 2PL работает по следующему алгоритму:
- Фаза установки блокировок: Транзакция может запрашивать блокировки для данных, которые она намерена использовать (чтение или запись).
- Фаза снятия блокировок: После начала снятия блокировок транзакция не может запрашивать новые блокировки.
Эти две фазы предотвращают конфликты и обеспечивают согласованное выполнение операций.
Изменение данных (операция записи)
- Запрашивается блокировка на запись (exclusive lock).
- Ожидается снятие всех блокировок, установленных до этой транзакции.
- Данные изменяются.
- Блокировка снимается.
Чтение данных
- Запрашивается блокировка на чтение (shared lock).
- Ожидается снятие всех блокировок на запись, установленных до этой транзакции.
- Данные считываются.
- Блокировка снимается.
Важные особенности
- Блокировка на запись. Она запрещает одновременно читать или изменять данные другим транзакциям.
- Изоляция транзакций. Согласно теореме 2PL, если все транзакции следуют этому протоколу, они будут изолированы друг от друга. Это значит, что каждая транзакция видит данные в состоянии, согласованном относительно её выполнения.
Преимущества 2PL
- Сериализуемость транзакций. Обеспечивает корректность выполнения операций.
- Гарантированная изоляция. Исключаются конфликты между транзакциями.
Недостатки 2PL
- Ожидание блокировок. Транзакция может быть вынуждена ждать, пока другие транзакции освободят ресурсы.
- Возможность deadlock. Две или более транзакции могут заблокировать друг друга, ожидая освобождения ресурсов.
Мета информация
Область:: 00 Разработка
Родитель:: Блокировка
Источник::
Автор::
Создана:: 2024-06-20