Files
digital-garden/dev/fundamental/Two-Phase Locking.md
2025-01-17 15:29:17 +03:00

51 lines
3.6 KiB
Markdown

---
aliases:
- 2-phase lock
- 2PL
tags:
- maturity/🌱
date:
- - 2024-06-20
---
Протокол **Two-Phase Locking (2PL)** управляет доступом к данным в базе данных, обеспечивая их корректность и изоляцию между транзакциями. 2PL работает по следующему алгоритму:
- **Фаза установки блокировок**: Транзакция может запрашивать блокировки для данных, которые она намерена использовать (чтение или запись).
- **Фаза снятия блокировок**: После начала снятия блокировок транзакция не может запрашивать новые блокировки.
Эти две фазы предотвращают конфликты и обеспечивают согласованное выполнение операций.
**Изменение данных (операция записи)**
- Запрашивается **блокировка на запись** (exclusive lock).
- Ожидается снятие всех блокировок, установленных до этой транзакции.
- Данные изменяются.
- Блокировка снимается.
**Чтение данных**
- Запрашивается **блокировка на чтение** (shared lock).
- Ожидается снятие всех блокировок на запись, установленных до этой транзакции.
- Данные считываются.
- Блокировка снимается.
**Важные особенности**
- **Блокировка на запись**. Она запрещает одновременно читать или изменять данные другим транзакциям.
- **Изоляция транзакций**. Согласно теореме 2PL, если все транзакции следуют этому протоколу, они будут изолированы друг от друга. Это значит, что каждая транзакция видит данные в состоянии, согласованном относительно её выполнения.
**Преимущества 2PL**
- **Сериализуемость транзакций**. Обеспечивает корректность выполнения операций.
- **Гарантированная изоляция**. Исключаются конфликты между транзакциями.
**Недостатки 2PL**
- **Ожидание блокировок**. Транзакция может быть вынуждена ждать, пока другие транзакции освободят ресурсы.
- Возможность [[deadlock]]. Две или более транзакции могут заблокировать друг друга, ожидая освобождения ресурсов.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Разработка|00 Разработка]]
**Родитель**:: [[Блокировка]]
**Источник**::
**Автор**::
**Создана**:: [[2024-06-20]]
### Дополнительные материалы
- [Two-phase locking - Wikipedia](https://en.wikipedia.org/wiki/Two-phase_locking)
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->