I. Techniki wielowersyjne sterowania współbieżnością Techniki wielowersyjne multiversion concurrency control. Technika wielowersyjna oparta na znacznikach czasu Dla każdej wersji X i elementu X przechowywane są dwa znaczniki czasu: TS_odczytu(X i ) największa wartośd spośród znaczników czasu transakcji, które z powodzeniem odczytały daną wersję X i. TS_zapisu(X i ) największa wartośd spośród znaczników czasu transakcji, które z powodzeniem zapisały daną wersję X i. Jeśli transakcja T może wykonad operację zapisz_element(x), tworzona jest nowa wersja X j elementu X i TS_odczytu(X j ) oraz TS_zapisu(X j ) ustawia się na TS(T). Jeśli transakcja T czyta X i odczytuje wartośd wersji X i, wartośd TS_odczytu(X i ) jest ustawiana na większą spośród wartości TS_odczytu(X i ) oraz TS(T). Reguły: 1) Jeżeli transakcja T wykonuje operację zapisz_element(x) i dla wersji i-tej elementu X o największym znaczniku czasowym zapisu mniejszym bądź równym TS(T) (czyli TS_zapisu(X i )<=TS(T)) zachodzi TS_odczytu(X i )>TS(T), wówczas transakcja T zostaje wycofana i potem będzie uruchomiona z nowym znacznikiem czasowym. W przeciwnym przypadku jeśli TS_zapisu(X i ) = TS(T), wersja X i jest modyfikowana, natomiast jeśli TS_zapisu(X i ) < TS(T), wówczas tworzona jest nowa wersja X j elementu X z wartościami TS_odczytu(X j ) = TS_zapisu(X j ) = TS(T). 2) Jeżeli transakcja T wykonuje operację odczytaj_element(x), wówczas odnajdywana jest wersja i-ta elementu X, która posiada największą wartośd TS_zapisu(X i ) spośród wszystkich wersji elementu X zapisanych przez transakcje o znacznikach mniejszych bądź równych TS(T). Wartośd X i jest przekazywana do transakcji T i wartośd TS_odczytu(X i ) ustawiana jest na większą spośród wartości TS(T) oraz bieżącej TS_odczytu(X i ). Technika wielowersyjna (dwuwersyjna) z użyciem blokad certyfikujących Wprowadza się nowy rodzaj blokady do certyfikacji. W tej technice blokady do zapisu (U) i do odczytu są ze sobą kompatybilne, natomiast nie są ze sobą kompatybilne blokady do zapisu (można rozważyd zastosowanie obydwu wersji omawianych wcześniej blokad U). Mogą byd przechowywane dwie wersje każdego elementu X. Jedna z wersji musi byd zawsze wersją zapisaną przez zatwierdzoną transakcję. Jedna z transakcji może dostad blokadę do zapisu i w tym samym czasie inne transakcje mogą czytad poprzednią wartośd (zatwierdzoną) elementu. Tylko jedna transakcja może w danym czasie zapisywad. Transakcja zapisuje swoją 1
wersję na brudno, jeśli transakcja jest gotowa do zatwierdzenia, musi uzyskad blokady do certyfikacji dla wszystkich zmienionych elementów. Blokady do certyfikacji są w konflikcie ze wszystkimi pozostałymi blokadami i z innymi blokadami do certyfikacji. Metoda ta pozwala uniknąd kaskadowego wycofania, ale możliwe są zakleszczenia. Technika odczytu spójnych wersji czasowych (technika wielowersyjna z użyciem blokad do zapisu typu X lub U)) Przechowywane są różne wersje danych. Transakcja odczytuje dane zatwierdzone przed początkiem transakcji (czyta zatwierdzone wartości, aktualne w momencie rozpoczęcia transakcji). Nie ma blokad do odczytu, zatem operacja odczytu nie blokuje operacji zapisu ani innych operacji odczytu. Są jednak stosowane długotrwałe (do kooca transakcji) blokady wyłączne do zapisu (operacja zapisu wyklucza inną operację zapisu). Transakcja T1 przy każdym zapisie sprawdza, czy istnieje inna transakcja T2, która zmodyfikowała dane zapisywane i zakooczyła się zatwierdzeniem. Jeśli istnieje taka transakcja T2, transakcja T1 jest wycofywana. Stosowaną tu zasadę można określid jako First-writer-wins. Ta technika jest stosowana w systemie Oracle w poziomie izolacji transakcji Serializable (w wersji do 10gr2 włącznie). II. Techniki optymistycznego sterowania współbieżnością Rozważane do tej pory techniki sterowania współbieżnością (oparte o blokady, oparte o znaczniki czasu, jednowersyjne i wielowersyjne) zakładały, że transakcje mogą operowad na tych samych danych (i byd może często to robią), zatem trzeba wprowadzad mechanizmy, które na bieżąco zapobiegają problemom wynikającym ze współbieżnego wykonania. Techniki optymistyczne zakładają, że na ogół transakcje operują na innych danych i w związku z tym można na bieżąco nie stosowad mechanizmów zapobiegających problemom, natomiast na koocu transakcji następuje sprawdzenie, czy realizowany harmonogram nie spowoduje problemów. Jeśli tak, to transakcja jest wycofywana, jeśli nie, to jest zatwierdzana. Trzy fazy: 1. Faza odczytu transakcja może odczytywad wartości zatwierdzonych elementów danych z bazy, aktualizacje są stosowane tylko względem kopii lokalnych elementów danych przechowywanych w obszarze roboczym transakcji. 2. Faza walidacji wykonywane jest sprawdzenie, mające na celu zapobieżenie naruszeniu szeregowalności w przypadku, gdy aktualizacje transakcji zostaną zastosowane. 3. Faza zapisu w razie powodzenia fazy walidacji, aktualizacje transakcji są zastosowane w bazie. W przeciwnym razie aktualizacje są odrzucane a transakcja później ponawiana. 2
III. Blokady zapobiegające, blokowanie na wielu poziomach ziarnistości Dotychczasowe założenie blokady tylko na poziomie wierszy. Można to zmienid. Mówi się z związku z tym o tzw. ziarnistości (granularity) blokowania. Można blokowad całe tabele, pewne zbiory wierszy (w praktycznych systemach: bloki, strony danych), kolumny, klucze, zakresy kluczy, indeksy, pliki, bazy danych. W kontekście blokowania można rozważad drzewo (hierarchę) elementów danych, którego korzeniem jest cała baza danych, natomiast liśdmi są najmniejsze elementy, na które może byd nałożona blokada. Blokowanie na tylko jednym poziomie najmniejszych elementów (np. wierszy) powoduje duży narzut (duża liczba blokad obsługiwanych przez zarządcę blokad). Z kolei blokowanie tylko dużych elementów powoduje zmniejszenie wydajności współbieżnych transakcji. Propozycja: można wprowadzid blokady na wielu poziomach (struktura drzewa). W celu ograniczenia przeszukiwania koniecznego do odnalezienia zablokowanych następników węzła można zastosowad tzw. blokady zapobiegające (intencjonalne, intent locks) i protokół blokowania zapobiegającego (intent locking protocol), które poprawią efektywnośd sprawdzania i przyznawania blokad. Protokół blokowania zapobiegającego: transakcja nie może założyd blokady na wierszu (generalnie: węźle wspomnianego wyżej drzewa), zanim nie otrzyma blokady (odpowiedniego typu) na tabeli zawierającej ten wiersz (generalnie: na węźle rodzicu). Nowe blokady na poziomie tabeli (ogólnie: na poziomie pewnego węzła macierzystego): IS (intent shared) wspólna blokada zapobiegająca transakcja zamierza założyd blokadę S na poszczególnych wierszach tabeli (ogólnie: węzłach potomnych) IX (intent exclusive) wyłączna blokada zapobiegająca zamiar założenia blokady X na wierszach (ogólnie: węzłach potomnych) SIX (shared intent exclusive) wspólna wyłączna blokada zapobiegająca na tabeli (węźle macierzystym) jest już blokada S, zamierza się założyd blokadę X na wiersze (połączenie S oraz IX). Macierz kompatybilności blokad: X SIX IX S IS bez blokady X Nie Nie Nie Nie Nie Tak SIX Nie Nie Nie Nie Tak Tak IX Nie Nie Tak Nie Tak Tak S Nie Nie Nie Tak Tak Tak IS Nie Tak Tak Tak Tak Tak bez blokady Tak Tak Tak Tak Tak Tak Protokół blokowania zapobiegającego: 1. Należy ściśle trzymad się zgodności blokad. 2. Korzeo drzewa musi zostad zablokowany jako pierwszy w dowolnym trybie. 3
3. Wierzchołek może zostad zablokowany przez transakcję T w trybie S lub IS tylko wtedy, gdy wierzchołek nadrzędny został już zablokowany przez transakcję T w trybie IS lub IX. 4. Wierzchołek może zostad zablokowany przez transakcję T w trybie X lub IX lub SIX tylko wtedy, gdy wierzchołek nadrzędny został już zablokowany przez transakcję T w trybie IX lub SIX. 5. Transakcja może zablokowad wierzchołek tylko wtedy, gdy nie zwolniła blokady żadnego wierzchołka (wymuszenie stosowania protokołu blokowania dwufazowego) 6. Transakcja może odblokowad wierzchołek tylko wtedy, gdy żaden z potomków tego wierzchołka nie jest zablokowany przez tę transakcję. Przykład Transakcja T 1 chce aktualizowad rekord r c2 w bloku B c, następnie T 2 chce odczytad rekord r a1 w bloku B a, następnie T 3 chce aktualizowad rekord r a2, następnie T 4 chce czytad B c, następnie T 5 chce odczytad blok B b i zaktualizowad rekord r b1. DB F 1 F 2 B a B b B c r a1 r a2 r a3 r b1 r b2 r c1 r c2 Przyznano? Pierwszy element danych, rodzaj blokady Drugi element Trzeci element Czwarty element T 1 Tak DB, IX F 2, IX B c, IX r c2, X T 2 Tak DB, IS F 1, IS B a, IS r a1, S T 3 Tak DB, IX F 1, IX B a, IX r a2, X T 4 Nie DB, IS (ok) F 2, IS (ok) B c, S (nie przyznano) T 5 Tak DB, IS F 1, IS B b, SIX r b1, X Eskalacja blokad łączenie blokad drobnoziarnistych w jedną gruboziarnistą, co ułatwia zarządzanie blokadami. Np. jeśli UPDATE aktualizuje dużo wierszy z tabeli, to system może zmienid ziarnistośd z poziomu wierszy do poziomu stron lub do poziomu tabeli. Inne typy blokad. W rzeczywistych systemach stosowane są również inne typy blokad, np. zabezpieczające przed dostępem do tabeli, jeśli modyfikowana jest jej struktura (blokady 4
modyfikacji schematu), blokady zakresów w kluczu, blokady w indeksach (mogą byd stosowane dla zabezpieczenia przed wierszami widmami). Zatrzaski (latches) Blokady zakładane na krótki czas, nie według reguły 2PL, stosowane np. w celu zagwarantowania fizycznej spójności bloku (strony) danych w czasie zapisywania na dysk. IV. Transakcje rozproszone - wprowadzenie Transakcje mogą dotyczyd operacji na wielu bazach danych, a nawet na wielu serwerach. Takie transakcje nazywają się transakcjami rozproszonymi. Dwufazowy protokół (2PC, 2 Phase Commit) zatwierdzania transakcji rozproszonych z wykorzystaniem zarządcy transakcji (jeden globalny) oraz zarządców zasobów (węzłów uczestników): Faza przygotowania (prepare). Zarządca transakcji otrzymuje żądanie wykonania operacji COMMIT, po czym wysyła żądanie prepare do zarządców zasobów przygotowania zakooczenia. Zarządcy zasobów zgłaszają do zarządcy transakcji wynik operacji prepare (czy transakcja może byd w lokalnym węźle zatwierdzona). Faza zatwierdzenia (commit). Jeśli wszyscy zarządcy zasobów zgłosili powodzenie (głosują za zatwierdzeniem transakcji), to zarządca transakcji wysyła do nich polecenie commit. Gdyby coś się nie powiodło, zarządca zasobów przesyła polecenie wycofania (rollback). 5