Notes09r

advertisement
Принципы построения и работы
баз данных
Тема 09: Управление
параллельным доступом
Принципы
построения БД
Тема 9
1
Параллельный доступ
(разделение данных)
T1
T2
…
Tn
БД
(ограничения
целостности)
Принципы
построения БД
Тема 9
2
Пример:
T1:
Read(A)
A  A+100
Write(A)
Read(B)
B  B+100
Write(B)
T2:
Read(A)
A  A2
Write(A)
Read(B)
B  B2
Write(B)
Ограничение: A=B
Принципы
построения БД
Тема 9
3
График (расписание) A
T1
Read(A); A  A+100
Write(A);
Read(B); B  B+100;
Write(B);
T2
A
25
125
Read(A);A  A2;
Write(A);
Read(B);B  B2;
Write(B);
125
250
250
Принципы
построения БД
B
25
Тема 9
250
250
4
График B
T1
T2
Read(A);A  A2;
Write(A);
Read(B);B  B2;
Write(B);
Read(A); A  A+100
Write(A);
Read(B); B  B+100;
Write(B);
A
25
50
50
150
150
Принципы
построения БД
B
25
Тема 9
150
150
5
График C
T1
Read(A); A  A+100
Write(A);
T2
Read(A);A  A2;
Write(A);
Read(B); B  B+100;
Write(B);
A
25
125
250
125
Read(B);B  B2;
Write(B);
250
Принципы
построения БД
Тема 9
B
25
250
250
6
График D
T1
Read(A); A  A+100
Write(A);
T2
Read(A);A  A2;
Write(A);
Read(B);B  B2;
Write(B);
A
25
125
250
50
Read(B); B  B+100;
Write(B);
250
Принципы
построения БД
Тема 9
B
25
150
150
7
График E
T1
Read(A); A  A+100
Write(A);
То же, что и график D
но с новой транзакцией T2’
T2’
Read(A);A  A1;
Write(A);
Read(B);B  B1;
Write(B);
A
25
125
125
25
Read(B); B  B+100;
Write(B);
125
Принципы
построения БД
Тема 9
B
25
125
125
8
• Мы хотим «хорошие графики», не зависящие от
– Начального состояния и
– Семантики (смысла) транзакции
• Достаточно рассмотреть порядок операторов read и
write
Пример:
Sc=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)
Sc’=r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(B)
T1
T2
упорядоченный график,
действия Т1 и Т2 не перекрываются
Принципы
построения БД
Тема 9
9
Однако, для Sd:
Sd=r1(A)w1(A)r2(A)w2(A) r2(B)w2(B)r1(B)w1(B)
• На самом деле,T2 должна предшествовать T1 в
любом эквивалентном расписании, т.е. T2  T1
• С другой стороны, если смотреть на изменение А,
то T1 должна предшествовать T2, т.е. T1  T2
T1
T2
Принципы
построения БД
Sd не может быть преобразовано в
упорядоченный график
Sd не эквивалентно никакому
упорядоченному графику
Sd - «плохой» график
Тема 9
10
Вернемся к Sc
Sc=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)
T1  T2
T1  T2
циклов нет  Sc “эквивалентно” упорядоченному
расписанию (в данном случае T1,T2)
Принципы
построения БД
Тема 9
11
Идеи
Транзакция: последовательность действий ri(x), wi(x)
Конфликтующие действия:
r1(A) w2(A) w1(A)
w2(A) r1(A) w2(A)
График: представляет хронологический порядок
выполнения действий
Упорядоченный график: действия транзакций не
перекрываются (для любой пары транзакций одна из
них должна быть полностью завершена до того, как
начнет выполняться другая)
Принципы
построения БД
Тема 9
12
Возможны ли параллельные действия?
T1 выдает
read(x,t)
Система
выдает
input(x)
Input(x)
завершен
tx
время
T2 выдает
input(b)
Система
write(b,s)
завершен
Система
выдает
выдает
output(b)
bs
output(b)
input(b)
завершен
Следовательно, в результате имеем
• S=…r1(x)…w2(b)… либо
• S=…w2(b)…r1(x)…
Принципы
построения БД
Тема 9
13
Что происходит в параллельными конфликтующими
действиями над одним и тем же объектом?
начало r1(A)
начало w2(A)
конец r1(A)
конец w2(A)
время
• Предполагается, что действия эквивалентны либо
r1(A) w2(A), либо w2(A) r1(A)
• Низкоуровневый механизм синхронизации
• Предполагается, что действия могут быть
представлены в виде той или иной
последовательности “атомарных действий”
Принципы
построения БД
Тема 9
14
Определение
S1, S2 называются конфликтно-эквивалентными
графиками, если S1 может быть преобразовано в
S2 последовательность перестановок не
конфликтующих действий.
График называется конфликтно-упорядочиваемым,
если он конфликтно-эквивалентен некоторому
упорядоченному графику.
Принципы
построения БД
Тема 9
15
Граф предшествования P(S) (S - график)
Вершины: транзакции в S
Дуги: провести Ti  Tj когда
- pi(A), qj(A) – действия в S
- pi(A) <S qj(A)
- по крайней мере одно из действий - write
• Каков будет P(S) для
S = w3(A) w2(C) r1(A) w1(B) r1(C) w2(A) r4(A) w4(D)
• Является ли S конфликтно-упорядочиваемым?
Принципы
построения БД
Тема 9
16
Лемма
Если S1, S2 конфликтно-эквивалентны, то P(S1)=P(S2)
Доказательство:
Предположим противное, т.е.что P(S1)  P(S2)
  Ti: Ti  Tj принадлежит S1 и не принадлежит S2
 S1 = …pi(A)... qj(A)…
pi, qj образуют
S2 = …qj(A)…pi(A)...
конфликт
 S1, S2 не являются конфликтно-эквивалентными
Замечание: из P(S1)=P(S2) не следует, что S1, S2
конфликтно-эквивалентны, контрпример
S1=w1(A) r2(A) w2(B) r1(B)
S2=r2(A) w1(A) r1(B) w2(B)
Принципы
построения БД
Тема 9
17
Теорема
Граф P(S1) ацикличен  график S1 является
конфликтно-упорядочиваемым
() Предположим, что S1 - конфликтно-упорядочиваем
  Ss: Ss, S1 конфликтно-эквивалентны  P(Ss) = P(S1)
 P(S1) ацикличен, поскольку ацикличен P(Ss).
() Пусть P(S1) ацикличен. Преобразуем график S1:
(1) В качестве T1 возьмем транзакцию без входящих дуг
(2) Перенесем все действия T1 в начало
S1 = ……. qj(A)…….p1(A)…..
T1
T2
T3
(3) Теперь S1’ = < действия T1 ><остальное>
T4
(4) Повторить шаги (1)-(3) для упорядочения остального!
Принципы
построения БД
Тема 9
18
Как обеспечить упорядочиваемость
графиков?
Одна возможность: в процессе работы система,
записать протокол ее работы и построить граф
предшествования P(S); если P(S) не содержит
циклов, то график был «хорошим»
Другая возможность 2: предотвращать появление
циклов в графе P(S)
Т1 Т2 ...
Тn
Диспетчер
БД
Принципы
построения БД
Тема 9
19
Протокол блокировки
Два новых действия:
заблокировать (исключительно): li (A)
разблокировать: ui (A)
T1 T2
диспетчер
Таблица
блокировок
правило #1: правильные транзакции
Ti: … li(A) … pi(A) … ui(A) ...
правило #2: задача диспетчера обеспечить
S = …….. li(A) ………... ui(A) ……...
нет lj(A)
Принципы
построения БД
Тема 9
20
Упражнение:
• Какие графики правильные?
Какие транзакции правильные?
S1 = l1(A)l1(B)r1(A)w1(B)l2(B)u1(A)u1(B)
r2(B)w2(B)u2(B)l3(B)r3(B)u3(B)
S2 = l1(A)r1(A)w1(B)u1(A)u1(B)
l2(B)r2(B)w2(B)l3(B)r3(B)u3(B)
S3 = l1(A)r1(A)u1(A)l1(B)w1(B)u1(B)
l2(B)r2(B)w2(B)u2(B)l3(B)r3(B)u3(B)
Принципы
построения БД
Тема 9
21
График F
T1
l1(A);Read(A)
A A+100;Write(A);u1(A)
T2
l2(A);Read(A)
A Ax2;Write(A);u2(A)
l2(B);Read(B)
B Bx2;Write(B);u2(B)
l1(B);Read(B)
B B+100;Write(B);u1(B)
Принципы
построения БД
Тема 9
22
График F
A B
T1
l1(A);Read(A)
A A+100;Write(A);u1(A)
T2
25 25
125
l2(A);Read(A)
A Ax2;Write(A);u2(A) 250
l2(B);Read(B)
B Bx2;Write(B);u2(B)
50
l1(B);Read(B)
B B+100;Write(B);u1(B)
Принципы
построения БД
150
250 150
Тема 9
23
Правило #3 Двухфазная блокировка(2PL)
Ti = ……. li(A) ………... ui(A) ……...
Нет ui(*)
Нет li(*)
# блок.
для Ti
время
Фаза роста
Принципы
построения БД
Фаза сжатия
Тема 9
24
График G
T1
l1(A);Read(A)
A A+100;Write(A)
l1(B); u1(A)
T2
задержано
l2(A);Read(A)
A Ax2;Write(A);l2(B)
Принципы
построения БД
Тема 9
25
График G
T1
l1(A);Read(A)
A A+100;Write(A)
l1(B); u1(A)
T2
задержано
l2(A);Read(A)
A Ax2;Write(A);l2(B)
Read(B);B B+100
Write(B); u1(B)
Принципы
построения БД
Тема 9
26
График G
T1
l1(A);Read(A)
A A+100;Write(A)
l1(B); u1(A)
T2
задержано
l2(A);Read(A)
A Ax2;Write(A);l2(B)
Read(B);B B+100
Write(B); u1(B)
l2(B); u2(A);Read(B)
B Bx2;Write(B);u2(B);
Принципы
построения БД
Тема 9
27
График H
(T2 в обратном порядке)
T1
l1(A); Read(A)
A A+100;Write(A)
l1(B)
T2
l2(B);Read(B)
B Bx2;Write(B)
l2(A)
задержано
задержано
Принципы
построения БД
Тема 9
28
• Предполагается, что транзакции, создающие
тупик, отменяются
– Они не имеют эффекта
– Они не появляются в графике
Например, график H =
Следующий шаг:
Показать, что правила #1,2,3  обеспечивают
получение конфликтно_упорядочиваемых графиков
Принципы
построения БД
Тема 9
29
Что считать конфликтом для li(A), ui(A):
• li(A), lj(A) - конфликт
• li(A), uj(A) - конфликт
Замечание: не образуют конфликтов следующие
примеры < ui(A), uj(A)>, < li(A), rj(A)>,...
Теорема Использование правил #1,2,3 приводит к
конфликтно-упорядочиваемым графикам
Для помощи в доказательстве:
Определение Shrink(Ti) = SH(Ti) = первая
разблокировка транзакции Ti
Принципы
построения БД
Тема 9
30
Лемма
Если Ti  Tj в S, то SH(Ti) <S SH(Tj)
Доказательство леммы:
Ti  Tj означает, что
S = … pi(A) … qj(A) …; p,q образуют конфликт
По правилам #1,2:
S = … pi(A) … ui(A) … lj(A) ... qj(A) …
По правилу 3: SH(Ti)
SH(Tj)
Следовательно, SH(Ti) <S SH(Tj)
Принципы
построения БД
Тема 9
31
Доказательство теоремы:
(1) Предположим, что P(S) имеет цикл
T1  T2 …. Tn  T1
(2) По лемме: SH(T1) < SH(T2) < ... < SH(T1)
(3) Противоречие доказывает, что P(S) - ацикличен
(4)  график S – конфликтно-упорядочиваем
Принципы
построения БД
Тема 9
32
• В дополнение к простой двухфазной блокировке,
остальные вопросы посвящены улучшению
производительности и большему параллелизму.
– Разделяемые блокировки
– Разные уровни блокировки
– Вставки, удаления и фантомы
– Другие типы управления параллельным
доступом
Принципы
построения БД
Тема 9
33
Разделяемые блокировки
До сих пор:
S = ...l1(A) r1(A) u1(A) … l2(A) r2(A) u2(A) …
На самом деле не конфликтуют
Вместо этого можно ввести:
S=... ls1(A) r1(A) ls2(A) r2(A) …. us1(A) us2(A)
Принципы
построения БД
Тема 9
34
Действия, связанные с блокировкой
l-ti(A): заблокировать A в режиме t (t is S or X)
u-ti(A): разблокировать A в режиме t (t is S or X)
Упрощение:
ui(A): разблокировать любой режим введенный
транзакцией Ti для атрибута A
Новое правило #1
Правильные транзакции
Ti =... l-S1(A) … r1(A) … u1 (A) …
Ti =... l-X1(A) … w1(A) … u1 (A) …
Принципы
построения БД
Тема 9
35
• Как быть с транзакциями, которые читают и
записывают один и тот же объект?
Возможность 1: Потребовать исключительную
блокировку
Ti = ...l-X1(A) … r1(A) ... w1(A) ... u(A) …
Возможность 2: Повышение статуса
(нужно читать и, возможно, писать)
Ti=... l-S1(A) … r1(A) ... l-X1(A) …w1(A) ...u(A)…
Можно рассматривать как требование второго блока
для А, либо отмены разделяемого и требования
исключительного блока
Принципы
построения БД
Тема 9
36
Новое правило #2 Задача диспетчера - обеспечить
S = ....l-Si(A) … … ui(A) …
нет l-Xj(A)
S = ... l-Xi(A) … … ui(A) …
нет l-Xj(A)
нет l-Sj(A)
Матрица совместимости
Функция comp
S
X
Принципы
построения БД
S
true
false
X
false
false
Тема 9
37
Новое правило # 3 Транзакции с
двухфазной блокировкой (2PL)
Нет изменений, за исключением изменения статуса:
(I) Если требуется больше блокировок
(например, S  {S, X})
– нет изменений!
(II) Если блокировка отменяется с заменой на более
строгую (например, разделяемая на
исключительную, S  X)
- она разрешена на фазе роста
Принципы
построения БД
Тема 9
38
Теорема Использование правил #1,2,3 с X/S
блокировками приводит к конфликтноупорядочиваемым графикам
Доказательство: подобно случаю X блокировок
Детали:
l-ti(A), l-rj(A) не сонфликтуют если comp(t,r)=true
l-ti(A), u-rj(A) не конфликтуют если comp(t,r)=true
Принципы
построения БД
Тема 9
39
Дополнительные типы блокировок
Примеры:
(1) инкрементальная блокировка
(2) блокировка для обновления
Пример инкрементальной блокировки
Функция comp
• Атомарное действие: INi(A)
S
X
{Read(A); A  A+k; Write(A)} S
T
F
X
F
F
• INi(A), INj(A) не конфликтуют!
I
F
F
INj(A)
A=7
INi(A)
+10 A=17
A=5
+2
+10 A=15 +2
INj(A)
Принципы
построения БД
I
F
F
T
INi(A)
Тема 9
40
Блокировка для обновления
Общая проблема тупиков при обновлениях:
T1
T2
l-S1(A)
l-S2(A)
l-X1(A)
Comp
l-X2(A)
S
Уже действ.
X
--- Тупик --блокировка
U
Новое
требование
S
T
F
F
X U
F T
F F
F F
Решение. Если транзакция Ti хочет читать A и знает,
что позже возможна запись, она требует блокировки
для обновления (а не разделяемой). Только в этом
случае статус может быть повышен.
Принципы
построения БД
Тема 9
41
Замечание: объект A может иметь одновременно
несколько блокировок ...
S1=...l-S1(A)…l-S2(A)…l-U3(A)… l-S4(A)…?
l-U4(A)…?
• Чтобы разрешить новую блокировку ее режим
должен быть совместимым со всеми текущими
блокировками
Принципы
построения БД
Тема 9
42
Как блокировка реализуется на практике?
• Каждая система имеет свои особенности
(Например, может даже не обеспечивать
конфликтно-упорядочиваемые графики)
• Можно использовать следующий (упрощенный)
подход ...
(1) Не доверять транзакциям при
блокировании/разблокировании
(2) Сохранять все блокировки до
завершения транзакции
Число
блок.
время
Принципы
построения БД
Тема 9
43
Ti
Read(A),Write(B)
диспетчер, часть I
таблица
блокир.
l(A),Read(A),l(B),Write(B)…
диспетчер, часть II
Read(A),Write(B)
БД
Принципы
построения БД
Тема 9
44
если null, объект не блокирован
A
B
C

Инф. о блокир. для B
Инф. о блокир. для C

...
Каждый возможный объект
Таблица блокировок (концептуально)
Принципы
построения БД
Тема 9
45
Используется хэширование:
...
A
H
A
Инф. о блокир. для A
...
Если объект не найден в хэш-таблице, он не
блокирован
Принципы
построения БД
Тема 9
46
Инф. о блокировках для A - пример
тран. Реж. ожид.? Nxt T_link
объект:A
Груп.режим:U
Ожидание:да
Список:
T1
S
no
T2
U
no
T3
X
yes 
К другим
записям Т3
Принципы
построения БД
Тема 9
47
Какие объекты мы блокируем?
кортеж A
кортеж B
кортеж C
Диск.
блок
A
...
...
Диск.
блок
B
БД
БД
БД
Отнош. A
Отнош. B
?
...
Принципы
построения БД
Тема 9
48
• Блокирование работаеи во всех случаях, но
должны ли мы блокировать большие или
маленькие объекты?
• Если мы блокируем большие объекты (например,
отношения)
– Нужно хранить и обрабатывать меньше блокировок
– Меньше возможностей для параллельного доступа
• Если мы блокируем маленькие объекты(например,
кортежи или отдельные поля)
– Нужно хранить и обрабатывать больше блокировок
– Больше возможностей для параллельного доступа
Принципы
построения БД
Тема 9
49
Можно использовать и то и другое!!
Спросите любого санитара про решение...
Каб. 1
Каб. 2
Каб. 3
Каб. 4
туалет
холл
Принципы
построения БД
Тема 9
50
Примеры
T1(IS), T2(S)
R1
t1
t2
t3
t4
T1(S)
T1(IS), T2(IX)
R1
t1
t2
T1(S)
Принципы
построения БД
t3
t4
T2(IX)
Тема 9
51
Пример
T1(IS), T2(IX)
R1
t1
t2
T1(S)
Принципы
построения БД
t3
t4
T2(IX)
Тема 9
52
Множественная детализация
(многоуровневая блокировка)
Comp
Requestor
IS IX S SIX X
IS
Holder IX
S
SIX
X
Принципы
построения БД
Тема 9
53
Множественная детализация
(многоуровневая блокировка)
Функция Comp
Держатель
Требующий
IS IX S SIX X
IS
IX
S
SIX
X
Режим блок.
родителя
IS
IX
S
SIX
X
Принципы
построения БД
T
T
T
T
F
T
T
F
F
F
T
F
T
F
F
Доступный режим
блок. потомка
IS, S
IS, S, IX, X, SIX
[S, IS] not necessary
X, IX, [SIX]
none
Тема 9
T
F
F
F
F
F
F
F
F
F
P
C
54
Правила
(1) Следовать функции совместимости comp
(2) Вначале потребовать блокировку корня, для любого
режима
(3) Узел Q может быть блокирован транзакцией Ti в
режиме S или IS только если родитель(Q) блокирован
той же транзакцией Ti в режиме IX или IS
(4) Узел Q может быть блокирован транзакцией Ti в
режиме X,SIX,IX только если родитель(Q) блокирован
той же транзакцией Ti в режиме IX,SIX
(5) Ti использует двухфазную блокировку
(6) Ti может разблокировать узел Q только если ни один
из потомков Q не блокирован той же транзакцией Ti
Принципы
построения БД
Тема 9
55
Упражнение:
• Может ли T2 получить доступ к f2.2 в режиме X ?
Какие блокировки будут получены T2 в результате?
T1(IX)
t1
T1(IX) t2
T1(X) f2.1
Принципы
построения БД
R1
f2.2
t4
t3
f3.1
Тема 9
f3.2
56
Упражнение:
• Может ли T2 получить доступ к f2.2 в режиме X ?
Какие блокировки будут получены T2 в результате?
T1(IX)
R1
t1
Принципы
построения БД
T1(X)
t2
f2.1
f2.2
t4
t3
f3.1
Тема 9
f3.2
57
Упражнение:
• Может ли T2 получить доступ к f3.1 в режиме X ?
Какие блокировки будут получены T2 в результате?
T1(IS)
R1
t1
Принципы
построения БД
T1(S)
t2
f2.1
f2.2
t4
t3
f3.1
Тема 9
f3.2
58
Упражнение:
• Может ли T2 получить доступ к f2.2 в режиме S ?
Какие блокировки будут получены T2 в результате?
T1(SIX)
R1
t1
T1(IX) t2
T1(X) f2.1
Принципы
построения БД
f2.2
t4
t3
f3.1
Тема 9
f3.2
59
Упражнение:
• Может ли T2 получить доступ к f2.2 в режиме X ?
Какие блокировки будут получены T2 в результате?
T1(SIX)
R1
t1
T1(IX) t2
T1(X) f2.1
Принципы
построения БД
f2.2
t4
t3
f3.1
Тема 9
f3.2
60
Операции вставки и удаления
A
...
Z
a
Вставка
Модификация правил блокировки:
(1) Получить исключительную блокировку на объект
A перед удалением A
(2) При вставке A транзакцией Ti, она получает
исключительную блокировку на объект A
Принципы
построения БД
Тема 9
61
Все еще есть проблемы: Фантомы
Пример: отношение R (E#,name,…)
ограничение: E# является ключом
использовать блокировку кортежей
R
o1
o2
Принципы
построения БД
E#
55
75
Name ….
Smith
Jones
Тема 9
62
T1: Вставить <99,Gore,…> в R
T2: Вставить <99,Bush,…> в R
T1
S1(o1)
S1(o2)
Проверить ограничение
Вставить o3[99,Gore,..]
T2
S2(o1)
S2(o2)
Проверить ограничение
Вставить o4[99,Bush,..]
...
...
Решение
• Использовать многоуровневую блокировку
R1
• Перед вставкой Q,
блокировать parent(Q) в X
t1
t2
Принципы
построения БД
Тема 9
t3
63
Вернемся к примеру
T1: Вставить <99,Gore>
T1
X1(R)
T2: Вставить <99,Bush>
T2
X2(R
)
delayed
Проверить ограничение
Вставить <99,Gore>
U(R)
X2(R)
Проверить ограничение
Ошибка! e# = 99 уже в R!
Принципы
построения БД
Тема 9
64
Вместо использования R, можно
использовать индекс на R:
Пример:
R
индекс
100<E#<200
индекс
0<E#<100
E#=2
E#=5
...
E#=107
E#=109
...
...
• Этот подход может быть обобщен на
множественные индексы
Принципы
построения БД
Тема 9
65
Далее
• Управление параллельным доступом для
древовидных структур данных
• Параллельный доступ с проверкой достоверности
Принципы
построения БД
Тема 9
66
Пример
Доступ ко всем объектам
происходит через корень,
с помощью указателей
A
B
T1 блок
T1 блок
C
T1 блок
D
E
F
Можно ли разблокировать A
Если он больше не нужен?
Принципы
построения БД
Тема 9
67
Идея: обход с использованием
“Обезьяньей лестницы”
A
T1 блок
T1 блок
B
T1 блок
C
T1 блок
D
E
Принципы
построения БД
Тема 9
F
68
Почему это работает?
• Предположим, все Ti начинаются с корня; требуя
исключительной блокировки
• Ti  Tj  Ti блокирует корень раньше Tj
Root
Q
Ti  Tj
• Работает даже если не всегда начинаем с корня
Принципы
построения БД
Тема 9
69
Правила: древовидный протокол
(исключительные блокировки)
(1) Первая блокировка Ti может быть для любого
элемента
(2) После этого, элемент Q может быть блокирован
транзакцией Ti только если parent(Q) блокирован
это транзакцией
(3) Элементы могут быть разблокированы в любой
момент
(4) После того как Ti разблокировала Q, она не
может его вновь заблокировать
Принципы
построения БД
Тема 9
70
• Древовидный протокол обычно используется для
параллельного доступа к B-tree
корень
Например, во время вставки родитель не
разблокируется до тех пор, пока не будет ясно, что
потомок не будет расщеплен
Принципы
построения БД
Тема 9
71
Проверка достоверности
Транзакции имеют 3 фазы:
(1) Чтение
– Все нужные значения БД прочитаны в
рабочую (временную) память
– Нет блокировок
(2) Проверка достоверности
– Проверить, что до сих пор график является
упорядочиваемым
(3) Запись
– Если проверка была успешной, записать в БД
Принципы
построения БД
Тема 9
72
Ключевая идея
• Сделать проверку атомарной
• Если T1, T2, T3, … порядок, для которого происходит
проверка, то результирующий график будет
конфликтно-эквивалентным графику Ss = T1 T2 T3...
Для реализации проверки достоверности система
поддерживает два множества:
• FIN = транзакции, завершившие фазу 3
(следовательно – полностью завершенные)
• VAL = транзакции, успешно завершившие фазу 2
(проверку достоверности)
Принципы
построения БД
Тема 9
73
Пример того, что должна предотвращать
проверка:
RS(T2)={B}
WS(T2)={B,D}
T2
начало
T3
начало

RS(T3)={A,B}
=
WS(T3)={C}
T2
T3
проверена
проверена
время
Принципы
построения БД
Тема 9
74
разрешать
Пример того, что должна предотвращать
проверка:
RS(T2)={B}
WS(T2)={B,D}
T2
начало
T3
начало

RS(T3)={A,B}
WS(T3)={C}
T2
T3
проверена
проверена
T2
закончила
фазу 3
Принципы
построения БД
=
Тема 9
T3
начало
время
75
Другой пример того, что проверка должна
предотвращать:
RS(T2)={A}
WS(T2)={D,E}
RS(T3)={A,B}
WS(T3)={C,D}
T2
проверена
T3
проверена
время
заверш.
дефект: w3(D) w2(D)
Принципы
построения БД
Тема 9
T2
76
Другой пример того, что проверка должна
предотвращать: разрешать
RS(T2)={A}
WS(T2)={D,E}
RS(T3)={A,B}
WS(T3)={C,D}
T2
T3
проверена
Принципы
построения БД
проверена
заверш.
заверш.
T2
T2
Тема 9
time
77
Правила проверки достоверности для Tj:
(1) Когда Tj начинает фазу 1:
ignore(Tj)  FIN
(2) Во время проверки Tj:
если check (Tj) то
[ VAL  VAL U {Tj};
выполнить фазу записи;
FIN FIN U {Tj} ]
Принципы
построения БД
Тема 9
78
Процедура проверки сheck (Tj):
для Ti  VAL - ignore (Tj) выполнить
если [ WS(Ti)  RS(Tj)   OR
Ti  FIN ]
то RETURN false;
RETURN true;
Не является ли такая проверка слишком
ограничительной ?
Принципы
построения БД
Тема 9
79
Улучшенная процедура проверки сheck (Tj):
для Ti  VAL - ignore (Tj) выполнить
если [ WS(Ti)  RS(Tj)   OR
(Ti  FIN AND WS(Ti)  WS(Tj)  )]
то RETURN false;
RETURN true;
Принципы
построения БД
Тема 9
80
Упражнение:
начало
проверена
завершение
U: RS(U)={B}
WS(U)={D}
W: RS(W)={A,D}
WS(W)={A,C}
V: RS(V)={B}
WS(V)={D,E}
T: RS(T)={A,B}
WS(T)={A,C}
Принципы
построения БД
Тема 9
81
Управление параллельным доступом с проверкой
достоверности (называемое также
оптимистичным контролем параллельного
доступа) полезно в некоторых случаях:
- Конфликты редки
- Имеется достаточно системных ресурсов
- Имеются динамически формируемые
ограничения целостности
Принципы
построения БД
Тема 9
82
Итоги
Изучили механизмы управления параллельным
доступом, используемые на практике
- двухфазная блокировка (2 PL)
- многоуровневая блокировка
- древовидные протоколы
- проверка достоверности
Принципы
построения БД
Тема 9
83
Download