
- •Транзакция, это - ?
- •Какие действия совершает транзакция по отношению к бд?
- •Что происходит с системой в случае аварийного завершения транзакции?
- •Какие операторы сигнализируют об успешном и неудачном завершении транзакции?-
- •Назовите основные свойства транзакции.
- •Что означает термин параллелизм в среде субд?
- •Какие существуют проблемы параллельных процессов?
- •Причина потери результатов обновления элементов бд?
- •Какие конфликты возникают при параллельной работе транзакций?
- •Назовите графики запуска транзакций.
- •Какой график транзакций называется сериализуемым?
- •Назовите способы разрешения конкуренций между транзакциями.
- •Проблемы блокировок транзакций?
- •Назовите способы предотвращения «тупиков».
- •Какова формальная модель транзакций?
- •Как осуществляется проверка сериализуемости транзакций?
- •Протокол, гарантирующий сериализуемость?
- •Представьте матрицу совместимости транзакций при использовании блокировок для чтения и записи.
Какова формальная модель транзакций?
Рассмотрим простейшую модель транзакции, которая, однако, позволяет говорить о сериализуемости. В этой модели транзакция рассматривается как последовательность операторов блокирования и разблокирования (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. Проверка сериализуемости расписания.
Входные данные. Расписание 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 не является сериализуемым.
Протокол, гарантирующий сериализуемость?
Этот протокол представляет собой просто требование, согласно которому в каждой транзакции все операции блокировки должны предшествовать всем операциям разблокирования. Подчиняющиеся этому протоколу транзакции называют двухфазными. Первая фаза называется фазой блокирования, а вторая – фаза разблокирования.
Утверждение. Любое расписание 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. Граф предшествований.
Так как в графе существует цикл, расписание не сериализуемо
В общем, могут существовать некоторые совокупности транзакций не являющиеся двухфазными, но соответствующие последовательным расписанием. Но поскольку сложно разобраться в этой совокупности транзакций, то лучше требовать, чтобы все транзакций были двухфазным.