Двухфазная блокировка: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
обновление
Нет описания правки
Строка 1:
В [[База данных|базах данных]] и [[Обработка транзакций|обработке транзакций]] '''двухфазная блокировка (2PL)''' - — это метод [[:en:Concurrency_controlConcurrency control|управления параллелизмом]], который гарантирует [[Граф предшествования|сериализуемость]]<ref>Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (1987): ''Concurrency Control and Recovery in Database Systems'', Addison Wesley Publishing Company, ISBN 0-201-10715-5</ref><ref>Gerhard Weikum, Gottfried Vossen (2001): ''Transactional Information Systems'', Elsevier, ISBN 1-55860-508-8</ref>. Это также имя результирующего [[Расписание (СУБД)|набора графиков]] [[Транзакция (информатика)|транзакций базы данных]] (истории). Протокол использует блокировки, применяемые транзакцией к данным, которые могут [[Блокировка (программирование)|блокировать]] (интерпретировать как сигналы для остановки) другие транзакции от доступа к тем же данным в течение жизни транзакции.
 
По протоколу 2PL блокировки применяются и удаляются в два этапа:
Строка 10:
 
== Блокировки доступа к данным ==
Блокировка - — системный объект, связанный с общим ресурсом, например элемент данных элементарного типа, строка в базе данных или страница памяти. В базе данных перед доступом к объекту может потребоваться блокировка объекта базы данных (блокировка доступа к данным) путем транзакции. Правильное использование блокировок предотвращает нежелательные, неправильные или непоследовательные операции с общими ресурсами другими параллельными транзакциями. Когда к объекту базы данных с существующей блокировкой, полученной одной транзакцией, необходимо получить доступ другой транзакцией, существующая блокировка объекта и тип предполагаемого доступа проверяются системой. Если существующий тип блокировки не разрешает этот конкретный тип одновременного доступа, транзакция, пытающаяся получить доступ, блокируется (в соответствии с предопределенным соглашением / схемой). На практике блокировка объекта не блокирует транзакцию непосредственно над объектом, а блокирует транзакцию от приобретения другой блокировки на одном и том же объекте, которая должна быть сохранена / принадлежит транзакции перед выполнением этой операции. Таким образом, с блокирующим механизмом необходимая блокировка операций контролируется надлежащей схемой блокировки блокировки, которая указывает, какие блоки блокировки блокируют тип блокировки.
 
Используются два основных типа замков:
Строка 53:
Согласно протоколу '''двухфазной блокировки''' транзакция обрабатывает свои блокировки в двух разных последовательных фазах во время выполнения транзакции:
 
# '''Фаза расширения''' (или Growing phase): фиксируются замки и не блокируются блокировки (количество замков может только увеличиваться).
# '''Фаза сжимания''': замки освобождаются, и блокировки не приобретаются.
 
Строка 69:
или '''Строгость''', или '''Строгое планирование''', или '''Строгая двухфазная блокировка'''
 
Чтобы соответствовать '''строгой двухфазной блокировке''' (SS2PL), протокол блокировки освобождает блокировку записи (исключение) и чтения (общего доступа), применяемую транзакцией, только после завершения транзакции, т. Е. Только после завершения выполнения (готовности) и становясь либо совершенными, либо прерванными. Этот протокол также соответствует правилам S2PL. Транзакция, подчиняющаяся SS2PL, может рассматриваться как имеющая фазу-1, которая длится всю продолжительность выполнения транзакции, а не фазу-2 (или вырожденную фазу-2). Таким образом, остается только одна фаза, и, по-видимому, «двухфазное» имя по-прежнему используется из-за исторического развития концепции из 2PL, а 2PL - — суперкласса. Свойство SS2PL расписания также называется '''Rigorousness'''. Это также имя класса расписаний, имеющих это свойство, а расписание SS2PL также называется «строгим графиком». Термин «Жесткость» свободен от ненужного наследия «двухфазного», а также не зависит от какого-либо (блокирующего) механизма (в принципе могут быть использованы другие блокирующие механизмы). Соответствующий механизм блокировки собственности иногда называют '''Rigorous 2PL'''.
 
SS2PL является особым случаем S2PL, то есть класс расписаний SS2PL является надлежащим подклассом S2PL (каждое расписание SS2PL также является расписанием S2PL, но существуют графики S2PL, которые не являются SS2PL).
Строка 78:
 
== Тупики в двухфазной блокировке ==
Блокирует блокировку доступа к данным. Взаимная блокировка между транзакциями приводит к [[Взаимная блокировка|тупиковой ситуации]], когда выполнение этих транзакций застопоривается и завершение не может быть достигнуто. Таким образом, необходимо устранить взаимоблокировки, чтобы выполнить эти транзакции и высвободить связанные с ними вычислительные ресурсы. Тупик - — это отражение потенциального цикла в [[Граф предшествования|графе приоритетов]], который будет происходить без блокировки. Тупик разрешается путем прерывания транзакции, связанной с таким потенциальным циклом, и прерывания цикла. Он часто обнаруживается с использованием графика ожидания (график конфликтов, заблокированных блокировками от материализации, конфликты, не материализованные в базе данных из-за заблокированных операций, не отражаются в графе приоритетов и не влияют на сериализуемость), что указывает, какая транзакция «ждет» блокировки, с помощью которой транзакция, а цикл означает тупик. Прерывание одной транзакции за цикл является достаточным для разрыва цикла. Если транзакция была прервана из-за ошибки взаимоблокировки, приложение может решить, что делать дальше. Обычно приложение перезапускает транзакцию с самого начала, но может задержать это действие, чтобы предоставить другим транзакциям достаточное время для завершения, чтобы избежать возникновения другого тупика. [6]
 
В распределенной среде для атомарности используется протокол атомных обязательств, как правило, двухфазный протокол фиксации (2PC). Когда восстанавливаемые данные (данные под управлением транзакций) разделены между участниками 2PC (т. Е. Каждый объект данных контролируется одним участником 2PC), то распределенные (глобальные) взаимоблокировки, взаимоблокировки с участием двух или более участников в 2PC автоматически решаются следующим образом:
 
Когда SS2PL эффективно используется в распределенной среде, то глобальные взаимоблокировки, связанные с блокировкой, генерируют блокировки голосования в 2PC и автоматически разрешаются с помощью 2PC (см. «Упорядочение обязательств» (CO) «в»в« Точной характеристике блокировок для голосования по глобальным циклам »"; за исключением статей CO, как известно, это замечает). Для общего случая 2PL глобальные взаимоблокировки аналогичным образом автоматически разрешаются протоколом точки синхронизации для этапа 1 в распределенной транзакции (точка синхронизации достигается путем «голосования» (уведомление о локальном фазе-1) и распространения на участников в распределенной транзакции так же, как точка принятия решения в атомном режиме, по аналогии с точкой принятия решения в CO, конфликтная операция в 2PL не может произойти до момента синхронизации фазы-1, с той же результирующей тупиковой ситуацией в случае глобальный тупик доступа к данным, тупик (который также является глобальным тупиком на основе блокировки) автоматически разрешается протоколом, прерывающим некоторые транзакции, с отсутствующим голосованием, обычно использующим тайм-аут).
 
=== Комментарий: ===
Строка 97:
 
== Ссылки ==
 
* [[Граф предшествования]]
* [[Блокировка (программирование)]]
 
{{нет категорий}}
{{изолированная статья}}
 
[[Категория:Базы данных]]
[[Категория:Обработка транзакций]]
[[Категория:Управление конкурентными потоками]]