stringtranslate.com

Двухфазная блокировка

В базах данных и обработке транзакций двухфазная блокировка ( 2PL ) — это пессимистичный метод управления параллелизмом , гарантирующий сериализуемость конфликтов . [1] [2] Это также имя результирующего набора расписаний транзакций базы данных (историй). Протокол использует блокировки , применяемые транзакцией к данным, которые могут блокировать (интерпретироваться как сигналы остановки) другим транзакциям доступ к тем же данным в течение жизни транзакции.

По протоколу 2PL блокировки накладываются и снимаются в два этапа:

  1. Фаза расширения: блокировки устанавливаются, но ни одна блокировка не снимается.
  2. Фаза сжатия: блокировки снимаются, а блокировки не устанавливаются.

В базовом протоколе используются два типа блокировок: общие и эксклюзивные блокировки. Уточнения базового протокола могут использовать больше типов блокировок. При использовании блокировок, блокирующих процессы, 2PL, S2PL и SS2PL могут подвергаться взаимоблокировкам , возникающим в результате взаимной блокировки двух или более транзакций.

Чтение и запись блокировок

Блокировки используются для обеспечения сериализуемости . Транзакция удерживает блокировку объекта, если эта транзакция получила блокировку этого объекта, который еще не был освобожден .

Для 2PL используются только блокировки доступа к данным — блокировки чтения ( общие блокировки ) и блокировки записи ( монопольные блокировки ). Ниже приведены правила блокировки чтения и блокировки записи :

Варианты

Двухфазная блокировка

Согласно протоколу двухфазной блокировки , каждая транзакция обрабатывает свои блокировки в две отдельные последовательные фазы во время выполнения транзакции:

  1. Фаза расширения (она же фаза роста): блокировки приобретаются, но блокировки не освобождаются (количество блокировок может только увеличиваться).
  2. Фаза сжатия (также известная как фаза сжатия): блокировки снимаются, а блокировки не устанавливаются.

Правила двухфазной блокировки можно резюмировать следующим образом: каждая транзакция никогда не должна устанавливать блокировку после того, как она сняла блокировку. Свойство сериализуемости гарантируется для расписания с транзакциями, подчиняющимися этому правилу.

Обычно без явного знания транзакции в конце фазы 1 правило безопасно определяется только тогда, когда транзакция завершила обработку и запросила фиксацию. В этом случае все замки можно снять сразу (этап 2).

Консервативная двухфазная блокировка

Разница между 2PL и C2PL заключается в том, что транзакции C2PL получают все необходимые блокировки до начала транзакции. Это делается для того, чтобы транзакция, которая уже удерживает некоторые блокировки, не блокировала ожидание других блокировок. Консервативный 2PL предотвращает тупики .

Строгая двухфазная блокировка

Чтобы соответствовать протоколу строгой двухфазной блокировки (S2PL), транзакция должна соответствовать 2PL и снимать блокировки записи (эксклюзивные) только после завершения транзакции (т. е. либо фиксации , либо отмены ). С другой стороны, блокировки чтения (совместного использования) регулярно снимаются во время фазы сжатия.

В отличие от 2PL, S2PL обеспечивает строгость (особый случай бескаскадной восстанавливаемости). Этот протокол не подходит для B-деревьев, поскольку он вызывает узкое место (в то время как B-деревья всегда начинают поиск с родительского корня). [ нужна цитата ]

Сильная строгая двухфазная блокировка

или Строгость , или Строгое планирование , или Строгая двухфазная блокировка

Чтобы соответствовать строгой двухфазной блокировке (SS2PL), блокировки чтения и записи транзакции снимаются только после ее завершения (т. е. либо фиксации, либо отмены). Транзакция, подчиняющаяся SS2PL, имеет только фазу 1 и не имеет фазы 2 до завершения транзакции. Каждое расписание SS2PL также является расписанием S2PL, но не наоборот.

Смотрите также

Рекомендации

  1. ^ Филип А. Бернштейн , Вассос Хадзилакос, Натан Гудман (1987): Управление параллелизмом и восстановление в системах баз данных, Addison Wesley Publishing Company, ISBN  0-201-10715-5
  2. ^ Герхард Вейкум , Готфрид Воссен (2001): Транзакционные информационные системы, Elsevier, ISBN 1-55860-508-8