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

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Исправлена ошибка в формулировке первого этапа двухфазной блокировки.
м fixed wordings only
Строка 1:
В [[База данных|базах данных]] и [[Обработка транзакций|обработке транзакций]] '''двухфазная блокировка (2PL)''' — это метод [[:en:Concurrency 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 блокировки (locks) применяются и удаляются в два этапа:
 
* Фаза расширения: фиксируются блокировки берутся и нени освобождаютсяодна блокировкиблокировка не освобождается.
 
* Фаза сжиманиясокращения: замкиблокировки освобождаются, и блокировкини одна блокировка не приобретаютсяберётся.
 
В базовом протоколе используются два типа замковблокировок: Shared и Exclusive locks. Уточнения базового протокола могут использовать больше типов блокировок. Используя блокировки, блокирующие процессы, 2PL могут подвергаться [[Взаимная блокировка|взаимоблокировкам]], которые являются результатом взаимной блокировки двух или более транзакций.
 
== Блокировки доступа к данным ==
Блокировка — системный объект, связанный с общим ресурсом, например элемент данных элементарного типа, строка в базе данных или страница памяти. В базе данных перед доступом к объекту может потребоваться блокировка объекта базы данных (блокировка доступа к данным) путем транзакции. Правильное использование блокировок предотвращает нежелательные, неправильные или непоследовательные операции с общими ресурсами другими параллельными транзакциями. Когда к объекту базы данных с существующей блокировкой, полученной одной транзакцией, необходимо получить доступ другой транзакцией, существующая блокировка объекта и тип предполагаемого доступа проверяются системой. Если существующий тип блокировки не разрешает этот конкретный тип одновременного доступа, транзакция, пытающаяся получить доступ, блокируется (в соответствии с предопределенным соглашением / схемой). На практике блокировка объекта не блокирует транзакцию непосредственно над объектом, а блокирует транзакцию от приобретения другой блокировки на одном и том же объекте, которая должна быть сохранена / принадлежит транзакции перед выполнением этой операции. Таким образом, с блокирующим механизмом необходимая блокировка операций контролируется надлежащей схемой блокировки блокировки, которая указывает, какие блоки блокировки блокируют тип блокировки.
 
Используются два основных типа замковблокировок:
 
* '''Запись-блокировка (эксклюзивная блокировка)''' связана с объектом базы данных транзакцией (терминология: «транзакция блокирует объект» или «получает блокировку для нее») перед записью (вставка / изменение / удаление) этого объекта.
Строка 28:
* Блокировка чтения не блокирует предполагаемое чтение другой транзакцией. Соответствующая блокировка чтения для предполагаемого считывания приобретается (совместно с предыдущим чтением) сразу после запроса на чтение, а затем происходит само предназначение считывания.
 
Существует несколько вариантов и усовершенствований этих основных типов блокировок с соответствующими вариациями поведения блокировки. Если первыйпервая замокблокировка блокирует другойдругую замокблокировку, двадве замкаблокировки называются ''несовместимыми''; в противном случае замкиблокировки ''совместимы''. Часто блокирующие взаимодействия блокировки представлены в технической литературе по таблице совместимости Lock. Ниже приведен пример с основными основными типами блокировок:
 
{| class="wikitable"
|+Таблица совместимости замковблокировок
!'''Тип блокировки'''
!'''блокировка чтения'''
Строка 44:
| '''Х'''
|}
'''X''' указывает на несовместимость, то есть случай, когда блокировка первого типа (в левом столбце) объекта блокирует блокировку второго типа (в верхней строке) от того, чтобы быть полученным на одном и том же объекте (другой транзакцией). Обычно объект имеет очередь ожидающих (по транзакциям) операций с соответствующими блокировками. ПервыйПервая заблокированныйзаблокированная замокблокировка для работы в очереди приобретается, как только существующая блокирующая блокировка удаляется из объекта, а затем выполняется соответствующая операция. Если блокировка для работы в очереди не блокируется какой-либо существующей блокировкой (возможно одновременное существование нескольких совместимых замковблокировок на одном и том же объекте), онаони приобретается немедленно.
 
'''Комментарий.''' В некоторых публикациях записи в таблице просто помечены как «совместимые» или «несовместимые», или, соответственно, «да» или «нет».
Строка 53:
Согласно протоколу '''двухфазной блокировки''' транзакция обрабатывает свои блокировки в двух разных последовательных фазах во время выполнения транзакции:
 
# '''Фаза расширения''' (или Growing phase): фиксируютсяблокировки замкиберутся и нени блокируютсяодна блокировкиблокировка не освобождается (количество замковблокировок может только увеличиваться).
# '''Фаза сжиманиясокращения''': замкиблокировки освобождаются, и блокировкини одна блокировка не приобретаютсяберётся (количество блокировок может только уменьшаться).
 
Правило двух фазовых блокировок можно суммировать как: никогда не получить блокировку после того, как блокировка была выпущена. Свойство [[Граф предшествования|сериализуемости]] гарантируется для расписания с транзакциями, которые подчиняются этому правилу.