Systemy zarządzania bazami
danych
Współbieżność, wielodostęp
T1 T2 … Tn
BD (więzy
integralności)
Przykładowe transakcje
T1: Read(A) T2: Read(A) A A+100 A A2
Write(A) Write(A) Read(B)Read(B)
B B+100 B B2 Write(B) Write(B)
Plan 1
T1 T2
Read(A); A A+100 Write(A);
Read(B); B B+100;
Write(B);
Read(A);A A2;
Write(A);
Read(B);B B2;
Write(B);
A B
25 25
125
125 250
250 250 250
Plan 2
T1 T2
Read(A);A A2;
Write(A);
Read(B);B B2;
Write(B);
Read(A); A A+100 Write(A);
Read(B); B B+100;
A B
25 25
50
50 150
Plan 3
T1 T2
Read(A); A A+100 Write(A);
Read(A);A A2;
Write(A);
Read(B); B B+100;
Write(B);
Read(B);B B2;
Write(B);
A B
25 25
125 250
125 250 250 250
Plan 4
T1 T2
Read(A); A A+100 Write(A);
Read(A);A A2;
Write(A);
Read(B);B B2;
Write(B);
Read(B); B B+100;
Write(B);
A B
25 25
125 250
50
Plan 5
T1 T2’
Read(A); A A+100 Write(A);
Read(A);A A1;
Write(A);
Read(B);B B1;
Write(B);
Read(B); B B+100;
Write(B);
A B
25 25
125 125
25 125 125 125
Taki sam jak plan 5, ale z inną T2’
• Chcemy planów dobrych niezależnie od
– początkowego stanu bazy danych – tego co robią transakcje
• Patrzymy tylko na kolejność zapisów i odczytów
Przykład:
Założenia
P1=r1(A)w1(A) r1(B)w1(B)r2(A)w2(A)r2(B)w2(B) T1 T2
P3=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)
Akcje zamienne
P4=r1(A)w1(A)r2(A)w2(A) r2(B)w2(B)r1(B)w1(B)
• W istocie:
T2 musi poprzedzać T1
w każdym planie równoważnym,
Akcje niezamienne
T1 T2 P4 nie można poprzestawiać tak by był szeregowy
P4 nie jest „równoważny”
żadnemu planowi szeregowemu P4 jest „zły”
• T2 T1
• Ale także: T1 T2
Powróćmy do P3
P3=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B) T1 T2 T1 T2
brak cykli P3 jest „równoważny”
planowi szeregowemu
Podstawowe pojęcia
Transakcja: ciąg akcji ri(x), wi(x)
Akcje konfliktowe: r1(A) w2(A) w1(A)
w2(A) r1(A) w2(A)
Plan: porządek chronologiczny wykonanych akcji
Plan szeregowy: plan bez przeplotu akcji różnych transakcji
A co z akcjami równoległymi?
Ti zleca System Input(X) t x read(x,t) zleca kończy
input(x) się
czas
T2 zleca
write(B,S) input(B)
kończy się System zleca
Więc ostatecznie efekt jest jednym z:
• P1=…r1(x)…w2(b)…
• P2=…w2(B)…r1(x)…
• Zakładamy, że wykonało się r1(A) w2(A) lub w2(A) r1(A)
• Niskopoziomowy mechanizm synchronizacji A co z konfliktowymi równoległymi
akcjami na tym samym obiekcie?
początek r1(A) koniec r1(A)
początek w2(A) koniec w2(A) czas
Równoważność konfliktowa
P1, P2 są równoważne konfliktowo, wtedy i tylko wtedy, gdy
P1 można przekształcić w P2 za pomocą ciągu zamian niekonfliktowych akcji.
Szeregowalność konfliktowa
P jest szeregowalny konfliktowo, wtedy i tylko wtedy, gdy
P jest równoważny konfliktowo pewnemu planowi szeregowemu
• Oznaczamy GK(P), P jest planem
• Węzły: transakcje planu P
• Krawędzie: Ti Tj jest w GK(P), wtw.
– pi(A), qj(A) są akcjami w P – pi(A) <S qj(A)
– co najmnniej jedna z pi, qj jest zapisem
Graf kolejności
Ćwiczonko
• Jaki jest GK(P), gdy
P = w3(A) w2(C) r1(A) w1(B) r1(C) w2(A) r4(A) w4(D)
Następne ćwiczonko
• Jaki jest GK(P), gdy
P = w1(A) r2(A) r3(A) w4(A) ?
Lemat
P1, P2 są konfliktowo równoważne GK(P1)=GK(P2)
Dowód:
Załóżmy, że GK(P1) GK(P2)
Ti: Ti Tj w P1 ale nie w P2
P1 = …pi(A)... qj(A)… pi, qj są
P2 = …qj(A)…pi(A)... konfliktowe
Uwaga: GK(P1)=GK(P2) P1, P2 są
konfliktowo równoważne Kontrprzykład:
P1=w1(A) r2(A) w2(B) r1(B) P2=r2(A) w1(A) r1(B) w2(B)
Twierdzenie
GK(P1) acykliczny P1 szeregowalny konfliktowo
() Załóż, że P1 jest szeregowalny konfliktowo
Ps: Ps, P1 równoważne konfliktowo
GK(Ps) = GK(P1)
GK(P1) acykliczny, bo GK(Ps) acykliczny
() Załóż, że GK(P1) acykliczny Przekształć P1 następująco:
(1) Weź T1 transakcję bez wchodzących krawędzi (2) Przesuń wszystkie akcje T1 na początek
P1 = ……. qj(A)…….p1(A)…..
(3) Mamy teraz P1 = < akcje T1 ><... reszta ...>
(4) Powtarzaj dopóki nie osiągniesz planu szeregowego (indukcja)
T1
T2 T3 T4
GK(P1) acykliczny P1 szeregowalny konfliktowo
Dowód c.d.
Jak wykluczyć plany nieszeregowalne?
Opcja 1: niech SZBD działa i rejestruje GK(P). Na koniec przetwarzania (np. dnia) sprawdź GK(P) i ogłoś, czy wykonanie było poprawne
Opcja 2: spraw w GK(P) nie mogły powstać by cykle
T1 T2 ….. Tn Planista
BD
Jak wykluczyć plany nieszeregowalne?
Protokół zakładania zamków
Dwie nowe akcje:
załóż zamek (wyłączne): li (A) zdejmij zamek: ui (A)
Planista T1 T2
Tablica zamków
Reguła 1: Legalne transakcje
Ti: … li(A) … pi(A) … ui(A) ...
Reguła 2: Poprawny planista
P = …….. li(A) ………... ui(A) ……...
brak lj(A)
• Które plany przepuści poprawny planista?
Które transakcje są legalne?
P1 = 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)
P2 = l1(A)r1(A)w1(B)u1(A)u1(B) l2(B)r2(B)w2(B)l3(B)r3(B)u3(B)
P3 = 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)
Ćwiczonko
Plan 6
T1 T2 l1(A);Read(A)
A A+100;Write(A);u1(A) l2(A);Read(A)
A Ax2;Write(A);u2(A) l2(B);Read(B)
B Bx2;Write(B);u2(B) l1(B);Read(B)
Plan 6
T1 T2 25 25 l1(A);Read(A)
A A+100;Write(A);u1(A) 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
A B
Reguła 3 Zamykanie dwufazowe
Ti = ……. li(A) ………... ui(A) ……...
Bez zdejmowania Bez zakładania
zamków zamków
# zamki trzymane przez Ti
czas
Faza Faza
wzrostu spadku
Plan 7
T1 T2
l1(A);Read(A)
A A+100;Write(A)
l1(B); u1(A) l2(A);Read(A)
A Ax2;Write(A);ll22(B)(B)
uśpienie procesu
Plan 7
T1 T2
l1(A);Read(A)
A A+100;Write(A)
l1(B); u1(A) l2(A);Read(A)
A Ax2;Write(A);ll22(B)(B) Read(B);B B+100
Write(B); u1(B)
uśpiony
T1 T2 l1(A);Read(A)
A A+100;Write(A)
l1(B); u1(A) l2(A);Read(A)
A Ax2;Write(A);ll22(B)(B) Read(B);B B+100
Write(B); u1(B)
uśpiony
Plan 7
Plan 8 (T
2działa najpierw na B)
T1 T2
l1(A); Read(A) l2(B);Read(B) A A+100;Write(A) B Bx2;Write(B) l
l11(B)(B) l l22(A)(A)
uśpiony uśpiony
• Zakładamy, że zakleszczone transakcje są wycofywane
– Nie mają żadnego skutku – Nie pojawiają się w planie
Np., Plan 8 =
To miejsce jest celowo puste!
Konfliktowość akcji l
i(A), u
i(A)
• li(A), lj(A) nie są w konflikcie
• li(A), uj(A) są w konflikcie
• Uwaga: brak konfliktu również tu:
– < ui(A), uj(A)>, – < li(A), rj(A)>,...
Twierdzenie Przestrzeganie reguł 1,2,3 (2PL) daje plany szeregowalne konfliktowo
W dowodzie pomoże nam funkcja SH Definicja SH(T ) = pierwsza akcja u
Poprawność 2PL
Lemat
Ti Tj w planie P SH(Ti) <S SH(Tj) Dowód lematu:
Ti Tj oznacza, że
S = … pi(A) … qj(A) …; p,q konfliktowe Zgodnie z regułami 1,2:
S = … pi(A) … ui(A) … lj(A) ... qj(A) … Reguła 3: SH(Ti) SH(Tj)
Więc: SH(Ti) <S SH(Tj)
Dowód:
(1) Załóżmy, że GK(P) ma cykl T1 T2 …. Tn T1
(2) Na mocy lematu:
SH(T1) < SH(T2) < ... < SH(T1) Twierdzenie Przestrzeganie reguł 1,2,3 (2PL) daje plany szeregowalne konfliktowo
Efektywność i współbieżność
• Dalej należy rozwazyć wiele rzeczy,
które poprawią efektywnośc i zwiększą współbieżność bazowego 2PL
– Zamki dzielone
– Wieloraka ziarnistość
– Wstawienie, usunięcia i fantomy
– Inne rodzaje mechanizmów ochrony przetwarzania współbieżnego
Zamki dzielone
Dotychczas:
P = ...l1(A) r1(A) u1(A) … l2(A) r2(A) u2(A) …
Niekonfliktowe
Zamiast tego:
Akcje zamkowe
l-ti(A): załóż zamek na A in trybie t (S lub X) u-ti(A): zdejmij zamek trybu t (S lub X)
Skrót:
ui(A): zdejmij zamek niezależne trybu jego założenia
Reguła 1: Legalne transakcje
Ti =... l-S1(A) … r1(A) … u1 (A) … Ti =... l-X1(A) … w1(A) … u1 (A) …
Opcja 1: Zażądaj zamka wyłącznego
Ti = ...l-X1(A) … r1(A) ... w1(A) ... u(A) …
A gdy transakcja czyta i pisze ten
sam obiekt?
Opcja 2: Promocja
(np., potrzebny odczyt, ale nie wiemy, czy będzie zapis)
Ti=... l-S1(A) … r1(A) ... l-X1(A) …w1(A) ...u(A)…
A gdy transakcja czyta i pisze ten
sam obiekt?
Reguła 2: Poprawny planista
P = ....l-Si(A) … … ui(A) … brak l-Xj(A)
P = ... l-Xi(A) … … ui(A) … brak l-Xj(A)
brak l-Sj(A)
Macierz zgodności zamków
zgodne S X
S T N X N N
Reguła3: Zamykanie dwufazowe
Brak zmian oprócz promocji:
(I) Jeśli promocja bierze więcej zamków (np., S {S, X}) tak samo!
(II) Jeśli promocja zwalnia zamek (np., S X)
- może być wykonana w fazie wzrostu
Dowód: podobnie jak w przypadku X
Szczegół:
l-ti(A), l-rj(A) nie są w konflikcie jeśli zgodne(t,r) l-ti(A), u-rj(A) nie są w konflikcie jeśli zgodne (t,r) Twierdzenie Przestrzeganie reguł 1, 2, 3 dla
zamków S/X powoduje, że wszystkie plany będą szeregowalne konfliktowo
Rodzaje zamków oprócz S i X
Przykłady:
(1) zamek increment
(2) zamek modyfikacyjny
Zamek increment
• Atomowa akcja zwiększania: INi(A)
{Read(A); A A+k; Write(A)}
• INi(A), INj(A) nie są w konflikcie!
A=7
A=5 A=17
A=15
INi(A) +2
INj(A) +10
+10 +2
zgodne S X I
S T N N
X N N N
I N N T
Macierz zgodności zamków increment
Zamki modyfikacyjne
Częste zakleszczenia przy promocjach:
T1 T2 l-S1(A)
l-S2(A) l-Xl-X11(A)(A)
l-Xl-X22(A)(A)
Rozwiązanie
• Jeśli Ti chce przeczytać A i wie, że może poźniej chcieć zmodyfikować A, żąda
zamka modyfikacyjnego (U), a nie dzielonego.
zgodne S X U
S T N T
X N N N
U T/N N N
• Tablica nie musi być symetryczna?
Nowe żądanie
Zamek już trzymany
Uwaga: obiekt A może być zamknięty w tym samym czasie na różne sposoby
P1=...l-S1(A)…l-S2(A)…l-U3(A)… l-S4(A)…?
l-U4(A)…?
• Przydzielenie zamka t na obiekcie jest
możliwe wtw. wszystkie zamki trzymane na tym obiekcie są zgodne z t
Zamki w praktyce
• Każdy SZBD jest inny
– np., może nawet nie udostępniąć możliwości zapewniania, że plany są szeregowalne konfliktowo)
• Jest jedno uproszczenie...
(1) Nie ufaj transakcjom, że będą same zakładać i zdejmować zamki
(2) Trzymaj wszystkie zamki do chwili zatwierdzenia
(3) Skąd my to znamy?
liczba zamków
czas
Proste podejście
SQ L
Ti
Read(A),Write(B)
l(A),Read(A),l(B),Write(B)…
Read(A),Write(B) Planista, część I
Planista, część II
BD Tablica
zamków
Tablica zamków
A CB
...
Informacje o zamkach na B Informacje o zamkach na C Jeśli null, obiekt nie ma zamka
Każdy możliwy obiekt
Lepiej użyć tablicy haszującej
A
• Jeśli obiektu nie ma w tablicy haszujacej, A
...
H Informacje o zamkach na A
Przykład informacji o zamkach
tran tryb czeka? Nst T_link
Obiekt:A
Tryb zamka:U Czekają?:tak Lista:
T1 S nie
T2 U nie
T3 XX tak
Do innych zapisów T3
Na które obiekty zakładamy zamki?
?
Relacja A Relacja B
...
Krotka A Krotka B Krotka C
...
Blok dyskowy
A Blok dyskowy
B
...
• Zamki działają zawsze, ale czy powinny być na małych czy dużych obiektach?
• Gdy są na dużych obiektach (np. relacjach)
– Potrzeba mniej zamków
– Mniejsze możliwości współbieżności
• Gdy są na małych obiektach (np. krotkach)
– Potrzeba więcej zamków – Większa współbieżność
Możemy mieć jedno i drugie!
Spytaj babci klozetowej o poradę...
Korytarz
Kabina 1 Kabina 2 Kabina 3 Kabina 4
Toaleta
Przykład
R1 t1
t2 t3 t4
T1(IS)
T1(S)
, T2(S)
Przykład
R1 t1
t2 t3 t4
T1(IS)
T1(S)
, T2(IX)
T2(X)
Wieloraka ziarnistość
zgodne Żądanie
IS IX S SIX X IS
Trzymany IX S SIX X
T T T T N N N N N N
N N
N
N N
N T
N T
N T
N N
T T
Parent Child can be locked in locked in
ISIX SSIX X
P C
Zamek Zamki, które można na rodzicu założyć na dziecku
ISIX SSIX X
R D
IS, S
IS, S, IX, X, SIX
[S, IS] niekoniecznie X, IX, [SIX]
żaden
Reguły
(1) Działaj zgodnie z macierzą zgodności zamków (2) Załóż najpierw zamek na korzeń drzewa
(3) Ti może założyć zamek S lub IS na węzeł Q
tylko wtedy, gdy rodzic(Q) ma zamek IX lub IS założony przez transakcję Ti
(4) Ti może założyć zamek X,SIX,IX na węzeł Q tylko wtedy, gdy rodzic(Q) ma zamek IX lub SIX założony przez transakcję Ti
(5) Ti zakłada zamki dwufazowo
Ćwiczonko
• Czy T2 może użyć f2.2 w trybie X? Jakie zamki uzyska T2 w tym celu?
R1 t1
t2 t3 t4
T1(IX)
f2.1 f2.2 f3.1 f3.2
T1(IX)
T1(X)
• Czy T2 może użyć f2.2 w trybie X? Jakie zamki uzyska T2 w tym celu?
R1 t1
t2 t3 t4
T1(X)
T1(IX)
Ćwiczonko
• Czy T2 może użyć f3.1 w trybie X? Jakie zamki uzyska T2 w tym celu?
R1 t1
t2 t3 t4
T1(S)
f2.1 f2.2 f3.1 f3.2
T1(IS)
Ćwiczonko
• Czy T2 może użyć f2.2 w trybie S? Jakie zamki uzyska T2 w tym celu?
R1 t1
t2 t3 t4
T1(IX)
T1(SIX)
Ćwiczonko
• Czy T2 może użyć f2.2 w trybie X? Jakie zamki uzyska T2 w tym celu?
R1 t1
t2 t3 t4
T1(IX)
f2.1 f2.2 f3.1 f3.2
T1(SIX)
T1(X)
Ćwiczonko
Operacje wstawienia i usuwania
Wstawienie A
Z
...
Zmiany w regułach zakładania zamków
(1) Zdobądź zamek wyłączny na A, gdy usuwasz A
(2) Po wstawieniu A wykonująca ją transakcja Ti otrzymuje zamek wyłączny na A
Ale nadal jest źle: Fantomy Fantomy
Przykład: relacja R (E#,Name,…) więzy: E# jest kluczem
zamki zakładane na krotki R E#Name ….
o1 55 Smith
T
1: Wstaw <99,Gore,…> do R T
2: Wstaw <99,Bush,…> do R
T1
T
2S1(o1) S2(o1) S1(o2) S2(o2)
Sprawdź więzy Sprawdź więzy Wstaw o3[99,Gore,..]
Wstaw o4[99,Bush,..]
... ...
Rozwiązanie
• Użyj wielorakiej ziarnistości
• Przed wstawieniem Q, założ zamek na rodzic(Q) w trybie X
R1 t1
t2 t3
Powrót do przykładu
T1: Wstaw<99,Gore> T2: Wstaw<99,Bush>
T1 T2
X1(R)
Sprawdź więzy
Wstaw<99,Gore>
U(R)
X2(R)
Sprawdź więzy
Ups! E# = 99 już jest w R!
X
X22(R)(R) Uśpienie
transakcji
Zamiast zamka na R, załóż zamek na indeks
Przykład: R
Indeks 0<E#<100
Indeks
100<E#<200
E#=2 E#=5 ... E#=107 E#=109
...
...
Przykład
A
B C
D
E F
wszystkie obiekty pobierane przez korzeń za
pośrednictwem wskaźników
zamek T1
zamek T1
zamek T1
czy możemy zwolnić zamek na A, gdy już go nie potrzebujemy??
Pomysł: drabinka
A
B C
D
zamek T1
zamek T1
zamek T1
zamek T1
Dlaczego to działa?
• Załóżmy, że Ti zaczyna od korzenia; zamek X
• Ti Tj Ti zakłada zamek na korzeń przed Tj
• Działa też gdy nie zawsze zaczynamy od korzenia
Korzeń
Q Ti Tj
Reguły protokołu zamków X na drzewach
(1) Pierwszy zamek Ti może być na czymkolwiek
(2) Potem, Ti może zalozyc zamek na węzeł Q tylko jeśli ma zamek na rodzicu Q
(3) Zamki można zdjąć w dowolnej chwili (4) Gdy T zdejmie zamek z Q, nie może
• Protokoły zamków na drzewach mogą być stosowane do indeksów na B+drzewach
Np. w czasie wstawienia, nie zdejmuj zamka na rodzicu, dopóki nie masz pewności, że nie musisz podzielic jakichś jego dzieci
Korzeń
Optymistyczne zamki
Transakcje mają trzy fazy:
(1) Odczyt
– Wszystkie dane są odczytywane
– Zapisy wykonywane w przestrzeni tymczasowej – Nie zakłada się zamków
(2) Walidacja
– Sprawdź, czy plan do tej pory szeregowalny
Główna idea
• Walidacja jest atomowa
• Jeśli T1, T2, T3, … jest kolejnością walidowania, to otrzymany plan jest równoważny
konfliktowo planowi Ps = T1 T2 T3...
Implementacja walidacji
• SZBD pamięta dwa zbiory:
FIN = tranksakcje, które skończyły fazę 3 (i wszystko już skończyły)
VAL = tranksakcje, które udanie
skończyły fazę 2 (walidację)
Przykład tego, co walidacja wyklucza
RS(T2)={B} RS(T3)={A,B}
WS(T2)={B,D} WS(T3)={C}
czas
Początek
T2 T2
zwalidowana
T3
zwalidowana
=
Początek
T3
T2
kończy
Przykład tego, co walidacja wyklucza
RS(T2)={B} RS(T3)={A,B}
WS(T2)={B,D} WS(T3)={C}
czas
Początek
T2 T2
zwalidowana T3
zwalidowana
=
dopuszcza
Początek
Początek
T3
Inna sytuacja wykluczona przez walidację RS(T2)={A} RS(T3)={A,B}
WS(T2)={D,E} WS(T3)={C,D}
czas T2
zwalidowana
T3
zwalidowana
koniec
T2
ŹLE: w3(D) w2(D)
koniec
T2
Inna sytuacja wykluczona przez walidację RS(T2)={A} RS(T3)={A,B}
WS(T2)={D,E} WS(T3)={C,D}
czas T2
zwalidowana T3
zwalidowana
dopuszczona
koniec
T2
Reguły walidacji dla T j
(1) Gdy Tj zaczyna fazę 1:
ignoruj(Tj) FIN (2) Przy walidacji Tj
jeśli poprawna(Tj), to
[ VAL VAL U {Tj};
wykonaj fazę 3 (zapis);
FIN FIN U {Tj} ]
poprawna (T
j)
Dla każdej Ti
VAL - ignoruj(Tj) rób jeśli [ WS(Ti)
RS(Tj) lub(
Ti
FIN i WS(Ti)
WS(Tj) )],zwróć fałsz;
zwróć prawdę;
Ćwiczonko
T: RS(T)={A,B}
WS(T)={A,C}
V: RS(V)={B}
WS(V)={D,E}
U: RS(U)={B}
WS(U)={D} W: RS(W)={A,D}
WS(W)={A,C}
początek walidacja koniec
Optymistyczne zamki
• Przydatne, gdy
– Rzadkie konflikty
– Jest nadmiar zasobów systemowych – Wymagania/więzy czasu rzeczywistego