51 lines
3.6 KiB
Markdown
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) -->
|