Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мокшин_2.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
70.57 Кб
Скачать
  1. Какова формальная модель транзакций?

Рассмотрим простейшую модель транзакции, которая, однако, позволяет говорить о сериализуемости. В этой модели транзакция рассматривается как последовательность операторов блокирования и разблокирования (LOCK и UNLOCK).       Сопоставляя каждой паре шагов LOCK A и последующего за ним UNLOCK A однозначную функцию f, можно более формально рассмотреть поведение транзакций. Отметим, что для данного элемента А транзакция может иметь более одной такой пары, то есть мы можем блокировать и разблокировать один и тот же элемент более одного раза. Пусть А0 – начальное значение А до исполнения любых транзакций. Значения, которые может принимать А, являются тогда формулами вида: f1f2…fn (А0) где fi – функции, ассоциируемые с парами шагов LOCK A – UNLOCK A соответствующих транзакций. 

Блокировка: LOCK A Разблокировка: UNLOCK A fn … f3 f2 f1 (A0) Пример 3.5. На рис. 3.10 приведены три транзакции и функции, ассоциированные с каждой парой LOCK A – UNLOCK A соответствующих транзакций.

Рис.3.10. Модели транзакций

На рис.3.11 показано возможное расписание этих транзакций и результат их воздействия на элементы A,B,C. 

  1. Как осуществляется проверка сериализуемости транзакций?

Алгоритм 1. Проверка сериализуемости расписания.

Входные данные. Расписание S для совокупности транзакций T1, …, Tk.

Метод. Построим ориентированный граф G, называемый графом предшествований, узлы которого соответствуют транзакциям.        Определим дуги графа G. Пусть S есть a1;a2;…,an, где ai – действие вида Tj: LOCK Am или Tj: UNLOCK Am и Tj указывает транзакцию, к которой относится данный шаг. Для ai имеющего вид Tj: UNLOCK Am ищем следующее за ним действие ap вида Ts: LOCK Am. Если оно существует, то строим дугу от Tj к Ts. Интуитивный смысл этой дуги заключается в том, что в любом последовательном расписании, эквивалентном S, Tj должно предшествовать Ts..         Если в графе G имеется цикл, то S-не сериализуемо. При отсутствии циклов находим такой линейный порядок транзакций, чтобы Ti предшествовала бы Tj всякий раз, когда существует дуга Ti -> Tj. Это всегда может быть сделано при помощи процесса так называемой топологической сортировки, определяемого следующим образом. Из ациклического G следует, что в нём существует некоторый узел Tj, который не имеет входящих дуг. Запишем Tj в список, удалив его из графа. Процесс повторяется до тех пор, пока в графе не останется узлов. Порядок перечисления узлов в списке даёт последовательный порядок транзакций.

Пример 3.6. Рассмотрим расписание, приведенное на рис.3.11. В графе G, изображенном на рис.3.12 имеются узлы Т1,Т2, и Т3.

Рис.3.12. Граф предшествований для транзакций расписания на рис.3.11.

Поскольку в графе существует цикл, расписание представленное на рис.3.11 не является сериализуемым.

  1. Протокол, гарантирующий сериализуемость?

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

Утверждение. Любое расписание S двухфазных транзакций является сериализуемыми. Доказательство в книге Дж.Ульмана. «Основы систем БД».

В некотором смысле двухфазный протокол – наилучший среди реально возможных расписаний. Можно показать, что для любой транзакции T1, не являющейся двухфазной, найдётся какая-либо транзакция T2, совместно с которой T1 сможет выполняться в несериализуемом расписании. Пусть транзакция T1 – не двухфазная. Тогда в T1 существует шаг UNLOCK A, предшествующий шагу LOCK B. Пусть T2, имеет вид T2: LOCK A; LOCK B; UNLOCK A; UNLOCK B;    Легко видеть, что расписание на рис.3.13 не сериализуемо, поскольку обработка А требует, чтобы Т1 предшествовала Т2, в то время как обработка В требует обратного порядка (см. рис. 3.14 - граф предшествований).

1 Т1:LOCK A             2 T1:UNLOCK A       | 3 T2:LOCK A              4 T2:LOCK B                                                5 T2:UNLOCK A                                                

6 T2:UNLOCK B                                          7 T1:LOCK B                                                 8 T1:UNLOCK B                            Рис.3.13. Расписание транзакций

Рис.3.14. Граф предшествований.

Так как в графе существует цикл, расписание не сериализуемо

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]