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