Zarządzanie współbieżnością transakcji Definicja transakcji Transakcja jest sekwencją logicznie powiązanych operacji na bazie danych, która przeprowadza bazę danych z jednego stanu spójnego w inny stan spójny Stan spójny bazy danych Stan spójny bazy danych S 1 Transakcja S 2 t1 t2 Czas 149
Zarządzanie współbieżnością transakcji Pojęcia podstawowe Stan spójny bazy danych to stan w którym wszystkie ograniczenia integralności wynikające ze schematu bazy danych oraz inne ograniczenia są spełnione. Przykład 1: Transakcja przelewu kwoty N z konta A na konto B begin UPDATE konta /* odejmij kwotę N z konta A */ SET stan = stan N WHERE id_konta = A; UPDATE konta /* dodaj do konta B kwotę N */ SET stan = stan + N WHERE id_konta = B; COMMIT; end 150
Zarządzanie współbieżnością transakcji Transakcja Operacje dostępu do danych, które może zawierać transakcja są następujące: read(x) czyta daną jednostkową X pamiętaną w bazie danych i podstawia ją pod zmienną w programie write(x) zapisuje wartość zmiennej X programu do jednostki danych X w bazie danych Wykonanie polecenia read (X) składa się z następujących kroków: Znajdź adres bloku dyskowego, który zawiera jednostkę X; Przekopiuj zawartość tego bloku do bufora w pamięci głównej (jeśli ten blok się tam jeszcze nie znajduje); Przekopiuj jednostkę X z bufora do zmiennej programowej X. 151
Zarządzanie współbieżnością transakcji Transakcja cd. Wykonanie polecenia write (X) składa się z następujących kroków: Znajdź adres bloku dyskowego, który zawiera jednostkę X; Przekopiuj zawartość tego bloku do bufora w pamięci głównej (jeśli ten blok się tam jeszcze nie znajduje); Przepisz jednostkę X ze zmiennej programowej X do właściwej lokalizacji w buforze; Zapisz na dysk uaktualniony blok z bufora (albo w trybie natychmiastowym albo z opóźnieniem) Przykład 1: T 1 : read(x); T 2 : read(x); X := X - N; X := X + M; write(x); write(x); read(y); Y := Y + N; write(y); 152
Zarządzanie współbieżnością transakcji Problem Współbieżne wykonywanie transakcji (w systemie wielozadaniowym z podziałem czasu procesora) może być przyczyną niespójności bazy danych Dlaczego zarządzanie współbieżnością (synchronizacja) transakcji jest konieczne? Przykład 2: Baza danych systemu rezerwacji lotniczej Transakcje T 1 i T 2 z Przykładu 1 są wykonywane współbieżnie w tym samym przedziale czasu i zakładamy, że ich operacje zostały rozdzielone w wyniku zastosowania algorytmu RR przydziału procesora 153
Zarządzanie współbieżnością transakcji Komentarz: 154
Zarządzanie współbieżnością transakcji The Lost Update Problem: T 1 : T 2 : read(x); X := X - N; time read(x); X := X + M; write(x); read(y); write(x); Y := Y + N; write(y); Czy wartość X jest poprawna? Sprawdź dla X = 80, N = 5, M = 4. 155
Zarządzanie współbieżnością transakcji The Temporary Update (Dirty Read) Problem: Jedna z transakcji aktualizuje stan bazy danych poczym pojawia się błąd w jej wykonaniu (ang. fails) T 1 : T 2 : read(x); X := X - N; time write(x); read(y); read(x); X := X + M; write(x); dirty data Błąd w wykonaniu T 1 i wartość X musi być zmieniona na poprzednią starą wartość, a w tym czasie T 2 przeczytała tymczasową niepoprawną wartość X 156
Zarządzanie współbieżnością transakcji The Incorrect Summary Problem (Odczyt niepowtarzalny): Jeśli jedna transakcja oblicza funkcję agregującą (sumującą) na pewnej liczbie rekordów, podczas gdy inna transakcja wykonuje operacje aktualizacji tych samych rekordów, to funkcja sumująca może obliczyć pewne wartości zanim zostaną one uaktualnione a inne po ich aktualizacji T 1 : T 3 : read(x); X := X - N; write(x); read(y); Y := Y + N; write(y); sum := 0; read(a); sum := sum + A; read(x); sum := sum + X; read(y); sum := sum + Y; Błąd 157
Zarządzanie współbieżnością transakcji Komentarz: 158
Zarządzanie współbieżnością transakcji Dlaczego konieczne jest odtwarzanie stanu bazy danych sprzed awarii (ang. recovery)? Gdy transakcja jest zgłaszana do systemu, to SZBD jest odpowiedzialny za to aby: Wszystkie operacje transakcji zakończyły się sukcesem i ich wyniki zostały na stałe zapisane w bazie danych, lub Transakcja nie miała wpływu na bazę danych lub inne transakcje SZBD nie może dopuścić aby pewne operacje transakcji na bazie danych zostały wykonane a inne nie. Taka sytuacja może się zdarzyć przy awarii systemu. Wnioski wynikające między innymi z przykładów przedstawionych wcześniej!!! 159
Zarządzanie współbieżnością transakcji Typy awarii 1. Załamanie się systemu wystąpił błąd programowy lub sprzętowy podczas wykonywania transakcji 2. Błąd transakcji lub błąd systemowy pewne operacje transakcji mogą powodować błąd systemowy (np. dzielenie przez 0) lub wykonanie transakcji zostaje przerwane (np. kill) 3. Błąd lokalny wykryty przez transakcję podczas wykonywania transakcji wystąpiły pewne warunki, które muszą powodować jej wycofanie 4. Egzekwowanie reguł synchronizacyjnych odpowiedni moduł SZBD może zdecydować o usunięciu transakcji i jej późniejszym restartowaniu 5. Błąd odczytu/zapisu z dysku Aby było możliwe odtworzenie stanu bazy danych sprzed awarii, w przypadku wystąpienia błędów 1-4, odpowiednie moduły SZBD muszą utrzymywać określone informacje 160
Zarządzanie współbieżnością transakcji Koncepcja transakcji: Klasyfikacja Transakcje zapytaniowe (read only) Transakcje aktualizujące (read, write) Transakcja jest atomową jednostką pracy systemu, która może albo być wykonana w całości, albo nie wykonana w ogóle. Podstawowe operacje składowe transakcji Begin_transaction Read / Write End_transaction Commit Rollback (Abort) 161
Zarządzanie współbieżnością transakcji Podstawowe operacje składowe transakcji - komentarz 162
Zarządzanie współbieżnością transakcji Przykład 3 UPDATE Pracownicy Begin_transaction; SET płaca = 1.15 x płaca read (A); WHERE staż >5... COMMIT; write (A); Commit; Dodatkowe operacje składowe transakcji UNDO REDO Konieczne w przypadku niektórych mechanizmów odtwarzania po awarii 163
Zarządzanie współbieżnością transakcji Diagram stanów transakcji Begin transaction ACTIVE Read / Write End_transaction PARTIALLY COMMITTED Commit COMMITTED Abort Abort FAILED TERMINATED 164
Zarządzanie współbieżnością transakcji Diagram stanów transakcji - komentarz 165
Zarządzanie współbieżnością transakcji Dziennik systemowy The System Log Cel: możliwość odtworzenia stanu bazy danych sprzed wystąpienia błędu transakcji Jak: śledzenie wszystkich operacji transakcji, które wpływają na dane w bazie Gdzie: log jest utrzymywany na dysku tylko awaria dysku uniemożliwia odtworzenie stanu systemu sprzed awarii Zawartość Log: 1. [start_transaction, T] 2. [write, T, X, old_value, new_value] 3. [read, T, X] 4. [commit, T] 5. [abort, T] (T jest to unikalny identyfikator transakcji nadawany przez system) 166
Zarządzanie współbieżnością transakcji Zatwierdzenie transakcji Transakcja T osiąga punkt zatwierdzenia (ang. commit point) gdy jej wszystkie operacje, które wykonywały operacje dostępu do bazy danych kończą się sukcesem i efekt jej działania jest na stałe zapamiętany w bazie danych oraz odnotowywany w dzienniku systemowym transakcja zapisuje wówczas w logu [commit, T] Problemy Awaria systemu: Które transakcje powinny być wycofane? Obsługa dziennika systemowego problem zapisu na dysk kolejnych porcji logu po ich aktualizacji w pamięci buforowej: egzekwowanie zapisu jeszcze przed zatwierdzeniem transakcji (ang. force writing) 167
Zarządzanie współbieżnością transakcji Punkty kontrolne w dzienniku systemowym Checkpoints in the System Log Punkty kontrolne specjalny rodzaj zapisu w logu Rekord zawierający punkt kontrolny jest zapisywany w logu okresowo i wiąże się z zapisywaniem na dysku efektów wszystkich operacji write zatwierdzonych transakcji Interwały czasowe administrator pomiędzy punktami kontrolnymi określa SZBD W punkcie kontrolnym podejmowane są następujące akcje: 1. Czasowe zawieszenie wykonywanych transakcji 2. Wymuszenie zapisu wszystkich operacji aktualizacyjnych z buforów w pamięci operacyjnej na dysk 3. Zapisanie w logu rekordu [checkpoint] i wymuszenie zapisu logu na dysk 4. Restartowanie transakcji 168
Własności ACID transakcji Każda transakcja musi posiadać cztery własności: Atomicity (Atomowość) zbiór operacji wchodzących w skład transakcji jest niepodzielny; albo zostaną wykonane wszystkie operacje transakcji albo żadna Consistency (Spójność) poprawne wykonanie transakcji przeprowadza bazę danych z jednego stanu spójnego do innego stanu spójnego Isolation (Izolacja) transakcje są od siebie logicznie odseparowane; mogą wzajemnie oddziaływać na siebie ale tylko w taki sposób jak gdyby były wykonywanie sekwencyjnie Durability (Trwałość) wyniki zatwierdzonych transakcji nie mogą zostać utracone, niezależnie od awarii systemu 169
Własności ACID transakcji Jakie moduły SZBD odpowiadają za egzekwowanie własności ACID? Komentarz: 170
Uszeregowanie transakcji Sposób wykonania operacji z różnych transakcji wykonywanych w systemie wielozadaniowym formuje tzw. uszeregowanie (realizację) (uporządkowanie, historię) transakcji Realizacja S transakcji T 1,..., T n jest pewnym uporządkowaniem operacji transakcji, przy czym dla każdej T i, która uczestniczy w S, jej operacje w S muszą występować w takim porządku w jakim występują w T i. Operacje transakcji T j mogą być przeplecione z operacjami transakcji T i z realizacji S Będziemy dalej rozważać następujące operacje: read r write w commit c abort a 171
Uszeregowanie transakcji Przykład 4 T 1 : T 2 : read(x); X := X - N; time read(x); X := X + M; write(x); read(y); write(x); Y := Y + N; write(y); Realizacja S a : r 1 (X); r 2 (X); w 1 (X); r 1 (Y); w 2 (X); c 2 ; w 1 (Y); c 1 ; 172
Uszeregowanie transakcji Przykład 4 cd. read(x); X := X - N; Time write(x); read(y); T 1 : T 2 : read(x); X := X + M; write(x); Realizacja S b : r 1 (X); w 1 (X); r 2 (X); w 2 (X); c 2 ; r 1 (Y); a 1 ; (Przy założeniu, że T 1 będzie wycofana po wykonaniu read(y) 173
Uszeregowanie transakcji Dwie operacje w realizacji S są konfliktowe jeśli należą do różnych transakcji oraz wykonują operacje dostępu do tej samej danej X i jedną z tych operacji jest operacja zapisu (write) Dwie transakcje T i i T j są konfliktowe jeżeli zawierają wzajemnie konfliktowe operacje Które operacje w realizacjach S a i S b są konfliktowe? Realizacja S transakcji T 1,..., T n jest kompletna (ang. complete schedule) jeśli spełnia następujące warunki: 1. Operacje w S są to te same operacje co występujące w T 1,..., T n ; 2. Dla każdej pary operacji w T i ich uporządkowanie w S jest takie samo jak T i ; 3. Dla każdych dwóch konfliktowych operacji, określone jest ich uporządkowanie. 174
Uszeregowanie transakcji Wszystkie transakcje w S muszą zawierać commit lub abort, tak więc kompletna realizacja nie dotyczy transakcji aktywnych Realizacja zawierająca tylko operacje zatwierdzonych transakcji jest nazywana zaakceptowaną projekcją C(S) realizacji S Realizacja S jest odtwarzalna (ang. recoverable) jeśli żadna transakcja T w S nie wykonuje operacji commit, dopóki wszystkie transakcje T, które wykonują operację zapisu danych, które transakcja T odczytuje, nie zostaną zatwierdzone (wykonają commit). Transakcja T czyta z transakcji T, jeśli pewna dana X jest najpierw zapisywana przez T a dopiero później czytana przez transakcję T. Czy realizacja S a z przykładu 4 jest odtwarzalna? 175
Uszeregowanie transakcji Realizacje odtwarzalne cd. Czy realizacja S c i S d są odtwarzalne? S c : r 1 (X); w 1 (X); r 2 (X); r 1 (Y); w 2 (X); c 2 ; a 1 ; S d : r 1 (X); w 1 (X); r 2 (X); r 1 (Y); w 2 (X); w 1 (Y); c 1 ; c 2 ; W realizacji odtwarzalnej nie zatwierdzone transakcje nie muszą być wycofywane 176
Uszeregowanie transakcji Sytuacje wyjątkowe kaskadowe wycofywanie (ang. cascading rollback) Nie zatwierdzone transakcje muszą być wycofane ponieważ czytały dane z transakcji, które padły S e : r 1 (X); w 1 (X); r 2 (X); r 1 (Y); w 2 (X); w 1 (X); a 1 ; Kaskadowe wycofywanie może być bardzo czasochłonne Realizacja jest nazywana unikającą kaskadowego wycofywania, jeśli wszystkie transakcje tylko czytają dane, które były pisane przez zatwierdzone transakcje Jak należałoby zmodyfikować realizację S e aby powyższe kryterium było spełnione? 177
Uszeregowalność realizacji (ang. Serializability of Schedules) T 1 i T 2 zgłoszone w tym samym czasie, wykonywane sekwencyjnie T 1 T 2 T 1 T 2 read(x); read(x); X := X N; X := X + M write(x) write(x) read(y); read(x); Y := Y + N X := X N; write(y) write(x) read(x); read(y); X := X + M Y := Y + N write(x) write(y) Realizacja A Realizacja B 178
Uszeregowalność realizacji transakcji T 1 i T 2 są wykonywane w trybie przeplatanym T 1 T 2 T 1 T 2 read(x); read(x); X := X N; X := X N; read(x); write(x) X := X + M read(x); write(x) X := X + M read(y); write(x) write(x) read(y); Y := Y + N Y := Y + N write(y) write(y) Realizacja C Realizacja D 179
Teoria uszeregowalności transakcji Cel: określenie, która realizacja transakcji jest poprawna oraz podanie technik, które dopuszczają tylko realizacje poprawne Realizacje A i B są to realizacje sekwencyjne, natomiast C i D współbieżne Jeżeli transakcje są niezależne, to wszystkie realizacje sekwencyjne są poprawne (ACID) Przykład: rozważmy realizacje A, B, C i D, przy założeniu, że X = 90 i Y = 90 Jaki wynik dają realizacje C i D? Czy są to wyniki poprawne? Dlaczego? 180
Teoria uszeregowalności transakcji Zadanie: określenie, które realizacje współbieżne zawsze dają wynik poprawny, a które nie. Realizacja S zbioru n transakcji jest poprawna jeżeli jest ona równoważna jakieś sekwencyjnej realizacji tego zbioru transakcji realizację taką nazywamy realizacją uszeregowalną Podział realizacji współbieżnych: 1. Realizacje równoważne jednej (lub więcej) realizacji sekwencyjnej i w konsekwencji uszeregowalne 2. Realizacje nie równoważne żadnej realizacji sekwencyjnej i w konsekwencji nieuszeregowalne 181
Teoria uszeregowalności transakcji Co to znaczy, że realizacje są równoważne? Pojęcie stanu i obrazu bazy danych 1. Stan bazy danych zbiór wartości wszystkich danych w bazie danych 2. Obraz bazy danych widziany przez transakcję T i jest zbiorem wartości odczytywanych przez nią danych Dwie realizacji S 1 i S 2 są stanowo równoważne jeżeli dla dowolnego początkowego stanu bazy danych, stan bazy danych po wykonaniu realizacji S 1 jest identyczny ze stanem po wykonaniu tego zbioru transakcji zgodnie z realizacją S 2. Czy realizacje S 1 i S 2 są stanowo równoważne (sprawdź dla X = 100 i innych wartości) S 1 S 2 read(x); read(x); X := X + 10; X := X * 1.1; write(x); write(x); 182
Teoria uszeregowalności transakcji Wniosek: Równoważność stanowa nie jest wystarczająca A więc co? Równoważność konfliktowa Dwie realizacje są konfliktowo równoważne jeśli porządek każdej pary konfliktowych operacji w obu realizacjach jest taki sam. A dokładniej? Mówimy, że dwie realizacje S 1 i S 2 są konfliktowo równoważne, jeżeli dla każdej pary konfliktowych operacji w realizacji S 1, takich, że operacja i (X) operacja j (X) (operacja i (X) poprzedza operacja j (X)), zachodzi również operacja i (X) operacja j (X) w realizacji S 2. 183
Teoria uszeregowalności transakcji Równoważność konfliktowa cd. Jeśli dwie konfliktowe operacje występują w różnym porządku w dwóch różnych realizacjach, to efekt tych realizacji może być różny dla transakcji lub stanu końcowego bazy danych. Przykład: S a : r 1 (X), w 2 (X); S b : w 2 (X), r 1 (X); Czy wartość odczytana przez r 1 (X) w obu realizacjach będzie taka sama? 184
Teoria uszeregowalności transakcji Realizacja S jest konfliktowo uszeregowalna, jeśli jest równoważna do pewnej sekwencyjnej realizacji S Możemy zmieniać uporządkowanie nie konfliktowych operacji w S aż otrzymamy równoważną realizację sekwencyjną S. Przykład: Czy realizacja D jest konfliktowo równoważna realizacji A? Dlaczego? Czy realizacja C jest konfliktowo równoważna realizacji A lub B? Dlaczego? 185
186
Testing for conflict serializability of a schedule (1) Graf uszeregowalności Graf skierowany G = (N,E) - składa się ze zbioru wierzchołków N={T 1...T n } i zbioru skierowanych krawędzi E = {e 1...e m }. Każdej transakcji odpowiada jeden wierzchołek; każda krawędź e i ma postać (T j T k ), 1 j n, 1 k n. Mówimy, że transakcja T j poprzedza T k w realizacji S, co zapisujemy T j T k, jeżeli zawierają odpowiednie operacje konfliktowe, między którymi zachodzi związek poprzedzania T j jest wierzchołkiem początkowym, a T k końcowym dla krawędzi e i, takiej, że jedna z operacji w T j występuje w realizacji S przed pewną operacją konfliktową w T k. Cyklem w grafie skierowanym jest sekwencja krawędzi C = (T j T k ), (T k T p ),...,(T i T j ). 187
Testing for conflict serializability of a schedule (2) Algorytm testowania uszeregowalności konfliktowej realizacji S (1) dla każdej T j w S utwórz wierzchołek z etykietą T j w grafie uszeregowalności (2) dla każdego przypadku w S gdy T j wykonuje read(x) po write(x), wykonywanej przez T i, utwórz krawędź (T i T j ) (3) dla każdego przypadku w S gdy T j wykonuje write(x) po read(x), wykonywanej przez T i, utwórz krawędź (T i T j ) (4) dla każdego przypadku w S gdy T j wykonuje write(x) po write(x), wykonywanej przez T i, utwórz krawędź (T i T j ) (5) realizacja S jest uszeregowalna wtedy i tylko wtedy jeśli graf uszeregowalności nie zawiera cykli. Krawędź T i T j (od T i do T j ) oznacza, że transakcja T i musi wystąpić przed transakcją T j w dowolnej realizacji sekwencyjnej, która jest równoważna S, ponieważ dwie konfliktowe operacje występują w realizacji w takim właśnie porządku. 188
Testing for conflict serializability of a schedule (3) Jeśli w grafie nie ma cykli, można utworzyć sekwencyjną realizację S równoważną realizacji S, przez uporządkowanie transakcji z S w następujący sposób: dla każdej krawędzi T i T j, T i musi występować przed T j w równoważnej realizacji sekwencyjnej S. Grafy uszeregowalności dla realizacji A, B, C i D T 1 T 2 X Graf uszeregowalności dla realizacji A T 1 T 2 X Graf uszeregowalności dla realizacji B X T T 1 2 X Graf uszeregowalności dla realizacji C (nieuszeregowalny) T T 1 2 X Graf uszeregowalności dla realizacji D (uszeregowalny, równoważny realizacji A) 189
Testing for conflict serializability of a schedule (4) Przykład 5 Transaction T 1 Transaction T 2 Transaction T 3 read (X); write (X); read (Y); write (Y); read (Z); read (Y); write (Y); read (X); write (X); read (Y); read (Z); write (Y); write (Z); 190
Testing for conflict serializability of a schedule (5) Realizacja E Transaction T 1 Transaction T 2 Transaction T 3 time read (X); write (X); read (Y); write (Y); read (Z); read (Y); write (Y); read (X); read (Y); read (Z); write (Y); write (Z); write (X) 191
Testing for conflict serializability of a schedule (6) Realizacja F Transaction T 1 Transaction T 2 Transaction T 3 time read (X); write (X); read (Y); write (Y); read (Z); read (Y); write (Y); read (X); write (X); read (Y); read (Z); write (Y); write (Z); 192
Testing for conflict serializability of a schedule (7) Realizacja E jest nieuszeregowalna, ponieważ odpowiadający jej graf zawiera cykle, natomiast F jest uszeregowalna do sekwencji T 3 T 1 T 2. Y T 1 T 2 X Equivalent serial schedules Reason: none Y T 3 Y,Z cycle X(T1 - T2), Y(T2 - T1) cycle X(T1 - T2), YZ(T2 - T3), Y(T3 - T1) Graf dla realizacji E X,Y T 1 T 2 T 1 T 2 Y Y,Z T 3 T 3 Graf dla realizacji F Equivalent serial schedules: T3 - T1 - T2 Equivalent serial schedules: T3 - T1 - T2 T3 - T2 - T1 193
Testing for conflict serializability of a schedule (8) Sekwencja: T 3 T 1 T 2 T 1 T 2 T 3 read (X); write (X); read (Y); write (Y); read (Z); read (Y); write (Y); read (X); write (X); read (Y); read (Z); write (Y); write (Z); 194
Wykorzystanie uszeregowalności Stwierdzenie, że realizacja S jest konfliktowo uszeregowalna, tzn. S jest konfliktowo równoważne do realizacji sekwencyjnej, jest równoznaczne ze stwierdzeniem, że S jest realizacją poprawną. W praktyce: Ze względu na przeplatane wykonywanie transakcji jest niemożliwe określenie jak w realizacji operacje powinny być uporządkowane, aby zagwarantować uszeregowalność. Transakcje są zgłaszane do systemu w sposób ciągły i nie można określić końca realizacji - teoria uszeregowalności ma zastosowanie tylko dla zatwierdzonych projekcji S. Istnieje jednak szereg metod zarządzania współbieżnością transakcji (synchronizacji transakcji), które gwarantują uszeregowalność 195
Algorytmy synchronizacji współbieżnych transakcji (1) Algorytmy synchronizacji współbieżnych transakcji a kryterium uszeregowalności transakcji. 1. algorytmy blokowania dostępu do danych - uszeregowanie transakcji wynika z kolejności uzyskiwanych blokad algorytm blokowania dwufazowego (2PL) 2. algorytmy znaczników czasowych - uszeregowanie transakcji wynika z wartości znaczników czasowych związanych z transakcjami 3. algorytmy optymistyczne - walidacja poprawności uszeregowania 196
Algorytmy synchronizacji współbieżnych transakcji (2) Blokada (lock) jest zmienną skojarzoną z jednostką danych w bazie danych, określającą jej status (dostępna/niedostępna) w kontekście operacji, które na tej jednostce danych mogą być wykonane. Blokady binarne: 2 stany: locked/unlocked (1/0), z każdą jednostką danych jest związana inna blokada, jeśli blokada danej X jest równa 1, to dana X jest niedostępna dla operacji transakcji, w przypadku blokad binarnych do transakcji muszą być włączone 2 dodatkowe operacje lock i unlock, transakcja żąda dostępu do danej X wydając operację lock(x), jeśli lock(x)=1 transakcja musi czekać, w przeciwnym wypadku transakcja wykonuje lock(x) := 1 i uzyskuje dostęp do danej X, po zakończeniu operacji na danej transakcja musi wykonać operację unlock(x), ustawiając zmienną blokady lock(x) = 0, a więc X jest dostępne teraz dla innych transakcji. Blokady binarne są najprostszą formą realizacji wzajemnego wykluczania. 197
Algorytmy synchronizacji współbieżnych transakcji (3) lock(x): B: if lock(x)=0 (*item is unlocked*) then lock(x):=1 (*lock the item*) else begin wait (until lock(x)=0 and the lock manager wakeups transaction); go to B end; Unlock(X): lock(x):=0 (*unlock the item*) if any transactions are waiting then wakeup one of the waiting transactions; 198
Algorytmy synchronizacji współbieżnych transakcji (4) SZBD zawiera moduł zarządzania blokadami i kontroli dostępu do blokad. W przypadku blokad binarnych do zarządzania współbieżnością realizacji transakcji stosuje się następujące reguły. 1. T musi wykonać lock(x) przed wykonaniem read(x) lub write(x) 2. T musi wykonać unlock(x) po wykonaniu wszystkich operacji zapisu i odczytu 3. T nie może wydać lock(x), jeśli już posiada blokadę X Mówimy, że pomiędzy operacjami lock(x) i unlock(x) transakcja utrzymuje blokadę X (hold the lock). Co najwyżej 1 transakcja może utrzymywać blokadę na określonej danej. Informacje o blokadach są utrzymywane w tablicy blokad (lock table): < data_item, lock> 199
Algorytmy synchronizacji współbieżnych transakcji (5) Shared and Exclusive lock Blokady wielokrotne (multiple-mode lock) wraz z trzema operacjami: read_lock(x), write_lock(x) i unlock(x) Zmienna blokady lock(x) może przyjmować 3 wartości: read_locked, write_locked, unlocked read_locked jest blokadą współdzieloną, ponieważ inne transakcje też mogą wykonywać operacje odczytu na danej X write_locked jest blokadą na wyłączność (exclusive), ponieważ tylko jedna transakcja może utrzymywać taką blokadę Każda blokada może być opisana rekordem składającym się z 3 pól: <data_item, lock, no_of_reads> 200
Algorytmy synchronizacji współbieżnych transakcji (6) read_lock(x): B: if lock (X) = unlocked then begin lock (X) read_locked ; no_of_reads(x) 1 end else if lock(x) = read_locked then no_of_reads(x) no_of_reads(x)+1 else begin wait (until lock(x)= unlocked and the lock manager wakes up the transaction); go to B end; write_lock (X): B: if lock (X) = unlocked then lock (X) write_locked else begin wait (until lock(x) = unlocked and the lock manager wakes up the transaction); go to B end; 201
Algorytmy synchronizacji współbieżnych transakcji (7) unlock_item (X): if lock (X) = write_locked then begin lock (X) unlocked; wakeup one of the waiting transactions, if any end else if lock(x) = read_locked then begin no_of_reads(x) no_of_reads(x) - 1; if no_of_reads(x) = 0 then begin lock (X) = unlocked ; wakeup one of the waiting transactions, if any end end; 202
Algorytmy synchronizacji współbieżnych transakcji (8) Z wykorzystaniem blokad wielokrotnych system musi gwarantować egzekwowanie następujących reguł: 1. T musi wydać read_lock(x) lub write_lock(x) przed wykonaniem read(x) 2. T musi wydać write_lock(x) przed wykonaniem write(x) 3. T musi wydać unlock(x) po wykonaniu wszystkich operacji read(x) i write(x) 4. T nie może wydać read_lock(x) jeśli przetrzymuje read_lock lub write_lock na danej X. 5. T nie może wydać write_lock(x) jeśli przetrzymuje read_lock lub write_lock na danej X. Komentarz: 203
Algorytmy synchronizacji współbieżnych transakcji (9) Dwie blokady są zgodne (ang. compatible), jeżeli mogą być jednocześnie założone na tą samą daną przez dwie różne transakcje w przeciwnym razie mówimy o blokadach niezgodnych Tabela zgodności blokad dla klasycznej metody blokowania blokada żądana blokada ustawiona S X S true false X false false 204
Algorytmy synchronizacji współbieżnych transakcji (10) Wykorzystywanie blokad binarnych lub wielokrotnych przez transakcje nie gwarantuje jednak uszeregowalności realizacji, w której uczestniczą transakcje. Dlaczego? Przykład 6: T 1 T 2 read_lock(y); read_lock(x); read(y); read(x); unlock(y); unlock(x); write_lock(x); write_lock(y); read(x); read(y); X:=X+Y: Y:=X+Y; write(x); write(y); unlock(x); unlock(y); 205
Algorytmy synchronizacji współbieżnych transakcji (11) Przykład 6 - cd: Wartości początkowe danych: X = 20, Y = 30 Jaka będzie wartość tych danych po wykonaniu realizacji T 1 T 2? Jaka będzie wartość tych danych po wykonaniu realizacji T 2 T 1? 206
Algorytmy synchronizacji współbieżnych transakcji (12) Przykład 6 - cd. T 1 T 2 time read_lock(y); read(y); unlock(y); write_lock(x); read(x); X:=X+Y; write(x); unlock(x); read_lock(x); read(x); unlock(x); write_lock(y); read(y) Y:=X+Y; write(y); unlock(y); 207
Algorytmy synchronizacji współbieżnych transakcji (13) Przykład 6 - cd: Wartości początkowe danych: X = 20, Y = 30 Jaka będzie wartość tych danych po wykonaniu realizacji T 1, T 2 w sposób przeplatany według rysunku powyżej? Komentarz: 208
Algorytmy synchronizacji współbieżnych transakcji (14) Two-Phase Locking (2PL) Transakcja jest wykonywana zgodnie z protokołem 2PL, jeśli wszystkie operacje blokowania read_lock i write_lock poprzedzają pierwszą operację unlock transakcji. Transakcja może być podzielona na 2 fazy; ekspansji (expanding), w której nowa blokada może być wykonana, ale żadna nie może być zwolniona, oraz fazy zwijania (shirnking) podczas której, istniejące blokady mogą być zwalniane, ale żadne nowe nie mogą być przyjęte. Blokady I Faza ekspansji II Faza zwijania 209
Algorytmy synchronizacji współbieżnych transakcji (15) Transakcje z przykładu 6 realizowane zgodnie z protokołem 2 PL T 1 T 2 read_lock(y); read(y); write_lock(x); read(y); X:=X+Y; write(x); unlock(y); unlock(x); read_lock(x); wait wait wait wait wait read(x) write_lock(y); read(y); Y:=Y+X; write(y) unlock(x) unlock(y) 210
Algorytmy synchronizacji współbieżnych transakcji (16) Komentarz: Odmiany 2PL Algorytm podstawowy: 1. Każda operacja read(x) danej transakcji T musi być poprzedzona operacją read_lock(x) lub write_lock(x). 2. Każda operacja write(x) danej transakcji musi być poprzedzona operacją write_lock(x). 3. Operacje unlock(x) dla danej transakcji T są wykonywane po zakończeniu wszystkich operacji read i write. Algorytm statyczny: (1., 2., 3.) 4. Wszystkie blokady muszą być uzyskane przed rozpoczęciem transakcji (przez predeklarowanie zbioru odczytywanych i modyfikowanych danych). 211
Algorytmy synchronizacji współbieżnych transakcji (17) Algorytm restryktywny: (1., 2.) 3. Operacje unlock(x) dla danej transakcji T są wykonywane po operacji commit lub rollback. początek transakcji blokada S + odczyt faza blokowania blokada X + zapis wstępny punkt zatwierdzenia zdjęcie blokady S zapis właściwy + zdjęcie blokady X faza odblokowywania Czas koniec transakcji Komentarz: 212
Algorytmy synchronizacji współbieżnych transakcji (18) Hierarchiczna metoda blokowania Problem ziarnistości blokad dobór rozmiaru blokowanej jednostki Komentarz: Koncepcja hierarchicznej struktury jednostek blokowania [J. Gray] baza danych jest widziana jako hierarchia jednostek blokowania zwanych ziarnami. BD Baza danych R 1 R 2... R n Relacje... Krotki Przykładowa hierarchia ziaren 213
Algorytmy synchronizacji współbieżnych transakcji (19) Hierarchiczna metoda blokowania cd. W hierarchicznych algorytmach blokowania wyróżnia się dwa rodzaje blokad: podstawowe (klasyczne blokady S oraz X) i intencjonalne Zakładając blokadę podstawową na określonym poziomie hierarchii ziaren blokujemy implicite wszystkie następniki tej jednostki w hierarchii Komentarz: Stosując wyłącznie mechanizm blokad podstawowych i gwarantując nienaruszalność warunku zgodności typów blokad, nie możemy zapewnić, że w przypadku współbieżnego wykonywania transakcji spójność bazy danych nie zostanie naruszona Przykład: 214
Algorytmy synchronizacji współbieżnych transakcji (20) Hierarchiczna metoda blokowania cd. W celu zapewnienia poprawności hierarchicznego blokowania danych należy zagwarantować, że po założeniu przez transakcję blokady podstawowej danego wierzchołka R w hierarchii ziaren, żadna inna transakcja nie uzyska zgodnej z nią blokady żadnego wierzchołka będącego poprzednikiem R. Rozwiązanie: blokady intencjonalne założenie blokady intencjonalnej na danym poziomie hierarchii oznacza, że na niższym poziomie jest założona blokada podstawowa Typy blokad intencjonalnych: Intencjonalna blokada współdzielona (IS) Intencjonalna blokada wyłączna (IX) Blokada mieszana (SIX), która jest połączeniem podstawowej blokady współdzielonej i intencjonalnej blokady wyłącznej 215
Algorytmy synchronizacji współbieżnych transakcji (21) Hierarchiczna metoda blokowania cd. Typy blokad intencjonalnych - komentarz: 216
Algorytmy synchronizacji współbieżnych transakcji (22) Hierarchiczna metoda blokowania cd. Tabela zgodności blokad dla hierarchicznej metody blokowania blokada żądana blokada ustawiona IS IX S SIX X IS true true true true false IX true true false false false S true false true false false SIX true false false false false X false false false false false 217
Algorytmy synchronizacji współbieżnych transakcji (23) Algorytm sygnalizacyjny Transakcja T jest wykonywana zgodnie z algorytmem sygnalizacyjnym wtedy, gdy spełnione są następujące warunki: 1. Pierwszym wierzchołkiem, do którego T żąda dostępu jest korzeń drzewa ziaren; 2. Transakcja T może założyć blokadę IS lub S wierzchołka nie będącego korzeniem wtedy i tylko wtedy, gdy blokuje jego poprzednika blokadą typu IS lub IX; 3. Transakcja T może założyć blokadę IX lub X wierzchołka nie będącego korzeniem wtedy i tylko wtedy, gdy blokuje jego poprzednika blokadą typu IX lub SIX; 4. Wszystkie blokady założone przez transakcję T muszą być zdjęte albo po zakończeniu jej wykonywania albo w trakcie jej wykonywania w kolejności odwrotnej do kolejności zakładania blokad (tj. od liści do korzenia drzewa). 218
Algorytmy synchronizacji współbieżnych transakcji (24) Algorytm sygnalizacyjny Przykład: abcd ab cd Niech transakcja T 1 odczytuje daną b i zapisuje dane c i d. Współbieżnie z transakcją T 1 są wykonywane transakcje T 2 i T 3, z których pierwsza zamierza odczytać dane a i b, natomiast druga daną c. Jakie blokady (i w jakiej kolejności) muszą założyć te transakcje? Czy będzie możliwa współbieżna realizacja całego zbioru transakcji? Komentarz: a b c d 219
Zakleszczenie transakcji (1) Stan zakleszczenia może wystąpić jeśli dwie transakcje oczekują wzajemnie na zwolnienie blokad danych T 1 T 2 read_lock(y); read(y); write_lock(x); wait wait read_lock(x); read(x) write_lock(y); wait wait wait 220
Zakleszczenie transakcji (2) Komentarz: X ' ' T T 1 2 Y Problem zakleszczenia - graf oczekiwania Rozwiązaniem tego problemu jest wykorzystanie protokołu zapobiegania zakleszczeniu - takim protokołem jest statyczny 2PL, który wymaga aby każda transakcja zablokowała wszystkie jednostki danych z wyprzedzeniem; jeśli na jakieś danej nie może założyć blokady to żadna z blokad nie może być założona ( wszystko albo nic ); transakcja czeka i po chwili próbuje ponownie. 221
Zakleszczenie transakcji (3) Inne protokoły zapobiegania - podejmują decyzję czy transakcja zaangażowana w deadlock powinna czekać, czy być wycofaną. Protokoły te oparte są o technikę znaczników czasowych transakcji TS(T) (ang. transaction timestamp), które są unikalnymi identyfikatorami transakcji. Znaczniki są uporządkowane wg kolejności startowania transakcji, tzn. jeśli T 1 zaczyna się przed T 2 to TS(T 1 )<TS(T 2 ) - starsza transakcja ma mniejszy znacznik czasowy. Algorytmy wykorzystujące znaczniki czasowe transakcji - TS(T), nadawane w momencie przybywania transakcji do systemu: wait-die: Transakcja T i próbuje uzyskać blokadę na danej X, tymczasem dana ta jest już zablokowana przez transakcję T j. Jeżeli TS(T i )<TS(T j ) (T i jest starsza T j ) wtedy transakcja T i będzie czekać na zwolnienie blokady. W przeciwnym wypadku T i będzie wycofana i restartowana z tym samym znacznikiem czasowym. wound-wait: Transakcja T i próbuje uzyskać blokadę na danej X, tymczasem dana ta jest już zablokowana przez transakcję T j. Jeżeli TS(T i )<TS(T j ) (T i jest starsza T j ) wtedy transakcja T j będzie wycofana i restartowana z tym samym znacznikiem czasowym. W przeciwnym wypadku T i będzie czekać na zwolnienie blokady. 222
Zakleszczenie transakcji (4) wait-die: if TS(T i )<TS(T j ) (T i is older than T j ) then T i is allowed to wait otherwise abort T i (T i dies) and restart it later with the same timestamp wound-wait: if TS(T i )<TS(T j ) (T i is older than T j ) then abort T j (T i wounds T j ) and restart it later with the same timestamp otherwise T i is allowed to wait 223
Zakleszczenie transakcji (5) Algorytmy nie korzystające ze znaczników czasowych. no waiting (NW): Transakcja T i próbuje uzyskać blokadę na danej X, tymczasem dana ta jest już zablokowana przez transakcję T j. Transakcja T i będzie wycofana i restartowana z pewnym opóźnieniem czasowym bez sprawdzania zakleszczenia. Może powodować wycofywanie transakcji bez powodu. cautious waiting (CW): Transakcja T i próbuje uzyskać blokadę na danej X, tymczasem dana ta jest już zablokowana przez transakcję T j. Jeżeli transakcja T j nie czeka na uzyskanie innej blokady, T i będzie czekać na zwolnienie blokady przez T j. W przeciwnym wypadku T i będzie wycofana i restartowana. 224
Zakleszczenie transakcji (6) Metoda wykrywania - periodycznie sprawdza się, czy system znajduje się w stanie zakleszczenia. Metoda ta jest odpowiednia dla systemów mało obciążonych, z krótkimi transakcjami (tylko kilka blokad). W przeciwnej sytuacji lepszym rozwiązaniem jest protokół zapobiegania. Najprostszą metodą wykrycia zakleszczenia jest skonstruowanie grafu oczekiwania (wait - for graph). Każdej transakcji odpowiada jeden wierzchołek w grafie. Jeśli T i czeka na blokadę X utrzymywaną aktualnie przez T j, w grafie tworzona jest krawędź (T i T j ). Po zwolnieniu blokady krawędź jest usuwana z grafu. Stan zakleszczenia ma miejsce wtedy i tylko wtedy jeśli w grafie występuje cykl. 225
Zakleszczenie transakcji (7) Wybór transakcji do usunięcia, spośród grupy transakcji znajdujących się w stanie zakleszczenia jest nazywany wyborem ofiary (victim selection). Ofiarą powinna być transakcja, która niedługo przebywa w systemie i nie wykonała wielu operacji zapisu. Problem cyklicznego restartowania transakcji 226
Zarządzanie współbieżnością przez znaczniki czasowe Znacznik czasowy to unikalny identyfikator oznaczający moment zgłoszenia transakcji w systemie, oznaczany przez TS(T) Algorytmy zarządzania współbieżnością przez znaczniki czasowe nie prowadzą do zakleszczenia Timestamp ordering: uszeregowanie równoważne konkretnej realizacji sekwencyjnej 2PL: uszeregowanie równoważne pewnej realizacji sekwencyjnej 227
Algorytm Timestamp Ordering (TO) (1) Dwa znaczniki czasowe danej X Read_TS(X): największy znacznik czasowy transakcji która odczytała daną X (znacznik czasowy najmłodszej transakcji która odczytała daną X) Write_TS(X): największy znacznik czasowy transakcji która odczytała daną X (znacznik czasowy najmłodszej transakcji która odczytała daną X) 228
Algorytm Timestamp Ordering (TO) (2) Basic Timestamp Ordering 1. Transakcja wykonuje operację write_item(x) a. jeśli Read_TS(X)>TS(T) lub Write_TS(X)>TS(T) to wycofaj transakcję T b. jeśli warunek (a) nie jest spełniony to wykonaj write_item(x) i wpisz Write_TS(X) := TS(T) 2. Transakcja wykonuje operację read_item(x) a. jeśli Write_TS(X)>TS(T) to wycofaj transakcję T b. jeśli Write_TS(X) <= TS(T) to wykonaj read_item(x) i wpisz Read_TS(X) := max{ts(t),read_ts(x)} 229
Algorytm Timestamp Ordering (TO) (3) Strict Timestamp Ordering Transakcja T wykonująca read_item(x) lub write_item(x) gdy TS(T)>Write_TS(X) musi opóźnić operację aż do zakończenia transakcji T która zapisała X (Write_TS(X)=TS(T )) co jest konieczne do zaimplementowania STO? 230
Algorytm Timestamp Ordering (TO) (4) Thomas s Write Rule Warunki dla write_item(x) 1. jeśli Read_TS(X) > TS(T) to wycofaj transakcję T 2. jeśli Write_TS(X) > TS(T) wówczas ignoruj operację write_item(x) 3. jeśli nie jest spełnione (1) ani (2) wówczas wykonaj write_item(x) i wpisz Write_TS(X) := TS(T) 231