Применяется ли двухфазная блокировка к каждой транзакции или к графику в целом? - PullRequest
0 голосов
/ 29 апреля 2018

Фон

Исходя из вопроса, заданного в Exchange Stack Exchange , я, похоже, неправильно понял, что такое 2PL .

Вот определение, которое я понимаю из Системы баз данных: Полная книга, второе издание (ISBN 9780131873254) Стр. 900 - 901:

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

  • В каждой транзакции все действия по блокировке предшествуют всем действиям по разблокировке.

Таким образом, «две фазы», ​​на которые ссылается 2PL, - это первая фаза, на которой получаются блокировки, и вторая фаза, на которой снимаются блокировки. Двухфазная блокировка - это условие, подобное согласованности, порядка действий в транзакции. Транзакция, которая подчиняется условию 2PL, называется транзакцией двухфазной блокировки или транзакцией 2PL.

Проблема

Я столкнулся с этим вопросом на домашнем задании, которое ставит следующую проблему:

  1. Соответствует ли следующая последовательность действий 2PL? (L обозначает блокировку, U обозначает разблокировку, R обозначает чтение, W обозначает запись, O обозначает вывод. Таким образом, L1 (A) обозначает, что транзакция 1 получает блокировку для A. Здесь мы не показываем ввод, но вместо этого предполагаем, что это произойдет по с R или W).

     a. Start T1.
     b. L1(A)
     c. R1(A)
     d. W1(A)
     e. O1(A)
     f. Start T2.
     g. L2(C)
     h. L1(B)
     i. U1(A)
     j. L2(A)
     k. W1(B)
     l. Commit T1
     m. R2(A)
     n. W2(C)
     o. U1(B)
     p. Commit T2
     q. U2(A)
     r. U2(C)
    

Мой ответ

Я понял, что 2PL означает получение всех блокировок до всех разблокировок на уровне транзакции в отличие от уровня schdule в целом, поскольку это то, что представляет собой учебник (и слайд по связанному вопросу из DBA Stack Exchange) сказал. Учитывая вышеизложенное, я написал такой ответ:

Двухфазная блокировка: в каждой транзакции все действия блокировки предшествуют любой разблокировке действия.

Первая фаза: все замки получены, вторая фаза, замки сняты.

Последовательность действий, изображенная в статье, следует 2PL, потому что все действия блокировки в каждой транзакции предшествуют всем действиям блокировки. А и Б являются заблокирован транзакцией один и между этими двумя нет разблокировки замки. Разблокировка происходит только после того, как A и B заблокированы. За транзакция 2, A и C блокируются до того, как произойдет любая разблокировка. Следовательно, так как все блокирующие действия в последовательности действий происходят до того, как происходит разблокировка, эта последовательность удовлетворяет 2PL.

Таким образом, 2PL сопровождается ....

... однако это было помечено неправильно по следующей причине:

Все замки должны быть получены до разблокировки и это не тот случай здесь. T1 разблокирует сигнал, что больше нет блокировки должно произойти из любой транзакции, но следующее действие включает вызов T2 заблокируйте A. Вот почему я отметил вас.

Следовательно, я не уверен, что я что-то здесь неправильно истолковал и хотел получить твердый ответ.

Вопрос

Что определяет, является ли расписание базы данных в 2PL, порядок блокировки и разблокировки в каждой транзакции за раз или порядок блокировки и разблокировки в расписании в целом?

...