Двухфазная блокировка
В базах данных и транзакций обработке двухфазная блокировка ( 2PL ) — это пессимистичный метод управления параллелизмом , гарантирующий сериализуемость конфликтов . [1] [2] Это также имя результирующего набора транзакций расписаний (историй) базы данных. Протокол использует блокировки , применяемые транзакцией к данным, которые могут блокировать (интерпретироваться как сигналы остановки) другим транзакциям доступ к тем же данным в течение жизни транзакции.
По протоколу 2PL блокировки накладываются и снимаются в два этапа:
- Фаза расширения: блокировки устанавливаются, но ни одна блокировка не снимается.
- Фаза сжатия: блокировки снимаются, а блокировки не устанавливаются.
В базовом протоколе используются два типа блокировок: общие и эксклюзивные блокировки. Уточнения базового протокола могут использовать больше типов блокировок. При использовании блокировок, блокирующих процессы, 2PL, S2PL и SS2PL могут подвергаться взаимоблокировкам , возникающим в результате взаимной блокировки двух или более транзакций.
Чтение и запись блокировок [ править ]
Блокировки используются для обеспечения сериализуемости . Транзакция удерживает блокировку объекта , если эта транзакция получила блокировку этого объекта, который еще не был освобожден.
Для 2PL используются только блокировки доступа к данным — блокировки чтения ( общие блокировки ) и блокировки записи ( монопольные блокировки ). Ниже приведены правила блокировки чтения и блокировки записи :
- Транзакция может читать объект тогда и только тогда, когда она удерживает блокировку чтения или записи на этом объекте.
- Транзакция может записать объект тогда и только тогда, когда она удерживает блокировку записи для этого объекта.
- Расписанию . (т. е. набору транзакций) разрешено одновременно удерживать несколько блокировок одного и того же объекта тогда и только тогда, когда ни одна из этих блокировок не является блокировкой записи Если одновременно попытается удержать запрещенную блокировку, она будет заблокирована.
Тип замка | блокировка чтения | блокировка записи |
---|---|---|
блокировка чтения | ✔ | Х |
блокировка записи | Х | Х |
Варианты [ править ]
гарантирует сериализуемость конфликтов | гарантирует сериализуемость представления | устраняет тупики | гарантирует возвратность | гарантирует строгость | предотвращает фантомное чтение | предотвращает грязное чтение | |
---|---|---|---|---|---|---|---|
2PL | Да | Нет | Нет | Нет | Нет | Нет | Нет |
C2PL | Да | Да [ нужна ссылка ] | Да | да? [ нужна ссылка ] | да? [ нужна ссылка ] | Нет [ нужна ссылка ] | Да [ нужна ссылка ] |
С2ПЛ | Да | Нет | Нет | Да | Да | Да | Да |
СС2ПЛ | Да | Нет | Нет | Да | Да | Да | Да |
Двухфазная блокировка [ править ]
Согласно протоколу двухфазной блокировки , каждая транзакция обрабатывает свои блокировки в два отдельных последовательных этапа во время выполнения транзакции:
- Фаза расширения (она же фаза роста): блокировки приобретаются, но блокировки не освобождаются (количество блокировок может только увеличиваться).
- Фаза сжатия (также известная как фаза сжатия): блокировки снимаются, а блокировки не устанавливаются.
Правила двухфазной блокировки можно резюмировать следующим образом: каждая транзакция никогда не должна устанавливать блокировку после того, как она сняла блокировку. Свойство сериализуемости гарантируется для расписания с транзакциями, подчиняющимися этому правилу.
Обычно без явного знания транзакции в конце фазы 1 правило безопасно определяется только тогда, когда транзакция завершила обработку и запросила фиксацию. В этом случае все замки можно снять сразу (этап 2).
двухфазная Консервативная блокировка
Разница между 2PL и C2PL заключается в том, что транзакции C2PL получают все необходимые блокировки до начала транзакции. Это делается для того, чтобы транзакция, которая уже удерживает некоторые блокировки, не блокировала ожидание других блокировок. Консервативный 2PL предотвращает тупики .
двухфазная Строгая блокировка
Чтобы соответствовать протоколу строгой двухфазной блокировки (S2PL), транзакция должна соответствовать 2PL и снимать свои (эксклюзивные) блокировки записи только после завершения транзакции (т. е. либо фиксации , либо отмены ). С другой стороны, блокировки чтения (совместного использования) регулярно снимаются во время фазы сжатия.
В отличие от 2PL, S2PL обеспечивает строгость (особый случай бескаскадной восстанавливаемости). Этот протокол не подходит для B-деревьев , поскольку он вызывает узкое место (в то время как B-деревья всегда начинают поиск с родительского корня). [ нужна ссылка ]
двухфазная строгая Сильная блокировка
или Строгость , или Строгое планирование , или Строгая двухфазная блокировка
Чтобы соответствовать строгой двухфазной блокировке (SS2PL), блокировки чтения и записи транзакции снимаются только после ее завершения (т. е. либо фиксации, либо отмены). Транзакция, подчиняющаяся SS2PL, имеет только фазу 1 и не имеет фазы 2 до завершения транзакции. Каждое расписание SS2PL также является расписанием S2PL, но не наоборот.
См. также [ править ]
Ссылки [ править ]
- ^ Филип А. Бернштейн , Вассос Хадзилакос, Натан Гудман (1987): Управление параллелизмом и восстановление в системах баз данных , Издательство Addison Wesley Publishing Company, ISBN 0-201-10715-5
- ^ Герхард Вейкум , Готфрид Воссен (2001): Транзакционные информационные системы , Elsevier, ISBN 1-55860-508-8