Zarządzanie transakcjami
Właściwości ACID Przyjmuje się, że transakcje i protokoły zarządzania transakcjami powinny posiadać właściwości ACID: Atomowość (atomicity) każda transakcja stanowi pojedynczą i niepodzielną jednostkę przetwarzania. Każda transakcja jest wykonywana w całości albo wcale. Spójność (consistency) transakcja rozpoczynając się w spójnym stanie bazy danych pozostawia bazę danych w stanie spójnym. Nie może naruszyć warunków spójności. Odizolowanie (isolation) zmiany wykonywane przez transakcję nie zatwierdzoną nie są widziane przez inne transakcje (chyba, że przyjęty poziom izolacji na to zezwala). Trwałość (duration) zmiany w bazie danych dokonane przez transakcję zatwierdzoną są trwałe w bazie danych, tzn. nawet w przypadku awarii systemu musi istnieć możliwość ich odtworzenia.
Transakcje i ich właściwości Transakcją T nazywamy ciąg następujących operacji na wspólnej bazie danych: rt[x] czytanie (read) danej x przez transakcję T; wt[x] zapisanie (write) danej x przez transakcję T; at odrzucenie (abort, rollback) transakcji T; ct zatwierdzenie (commit) transakcji T; x jest jednostką danych o różnym poziomie granulacji np.. dana elementarna, krotka (rekord), zbiór krotek wyznaczony przez warunek Φ, tabela bazy danych, itd..
Przykład transakcji (1) T1: w1[x] r1[x] c1 T2: w2[x] r2[x] c2 Na każdym poziomie izolacji: w1[x] r1[x] c1 w2[x]r2[x] c2
Przykład transakcji (2) T1: w1[x] a1 T2: r2[x] w2[x->y] c2 Na poziomie izolacji 0: w1[x] r2[x]w2[x->y]c2a1 Na poziomie izolacji wyższym niż 0: w1[x] a1r2[x]w2[x->y]c2
Przykład transakcji (3) T1: r1[x] r1[x] c1 T2: w2[x] c2 Na poziomie izolacji 0, 1: r1[x] w2[x] r1[x] c1 c2 Na poziomie izolacji 2, 3: r1[x] r1[x] c1 w2[x] c2
Przykład transakcji (4) T1: r1[u] r1[u] c1 T2: w2[u] c2 Na poziomie izolacji 0, 1, 2: r1[u] w2[u] r1[u] c1 c2 Na poziomie izolacji 3: r1[u] r1[u] c1 w2[u] c2
Planista Zarządzaniem transakcjami zajmuje się planista (ang. scheduler) Planista związany jest z każdym menadżerem baz danych zarządzającym danymi lokalnej bazy danych Jest tylu planistów ile jest baz w systemie Główny menadżer transakcji SZBD kieruje wykonanie transakcji do odpowiedniego planisty Strategia działania planisty jest realizowana za pomocą protokołu blokowania dwufazowego (B2F)
Reguły działania planisty Jeżeli operacja pj[x] może być wykonana, to planista zakłada blokadę do odczytu (SHARED) lub do zapisu (EXCLUSIVE) na daną x dla transakcji Tj. Operację tę przekazuje Menadżerowi Danych (MD) do wykonania. Zdjęcie założonej blokady może nastąpić najwcześniej wtedy, gdy MD powiadomi planistę o zakończeniu wykonywania operacji. Jeśli nastąpiło zdjęcie jakiejkolwiek blokady założonej dla transakcji T, to dla T nie można założyć już żadnej innej blokady (reguła B2F).
Fazy B2F Trzecia reguła uzasadnia nazwę blokowanie dwufazowe. W procesie wyróżnia się dwie fazy: faza zakładania blokad i faza zdejmowania blokad na rzecz jakiejś transakcji. Sposób zdejmowania blokad jest różny dla różnych poziomów izolacji.
Realizacja różnych poziomów izolacji w protokole B2F Założenia: Uzyskanie blokady S (SHARED) jest konieczne dla odczytania danej. Uzyskanie blokady X (EXCLUSIVE) jest konieczne dla zapisania (modyfikacji, usunięcia) danej. Blokadę S dla tej samej danej może uzyskać dowolna liczba transakcji. Blokadę X dla konkretnej danej może uzyskać tylko jedna transakcja. S i X nie mogą być jednocześnie nałożone na tę samą daną dla różnych transakcji.
Działanie B2F - przykład Dana jest historia transakcji: w1[y]w2[y]c1c2 Transakcja T1 zakłada blokadę X dla danej y. Transakcja T2 nie może założyć żadnej blokady na daną y, a więc musi zaczekać na zwolnienie blokady przez T1. W momencie zatwierdzenia transakcji T1 następuje zwolnienie blokady X. Po zwolnieniu blokady przez T1, transakcja T2 zakłada blokadę X na daną y. W momencie zatwierdzenia transakcji T2 następuje zwolnienie blokady.
B2F realizacja poziomu izolacji 0 Dana zablokowana na czas realizacji operacji Read (blokada S) jest natychmiast odblokowywana po zakończeniu tej operacji. Dana zablokowana na czas realizacji operacji Write (blokada X) zmienia blokadę na S, to znaczy może na niej być realizowana operacja Read, ale nie operacja Write. Blokada na operacji Write zdejmowana jest całkowicie dopiero po zatwierdzeniu transakcji.
Nieodtwarzalne historie przetwarzania blokowanie zasobów na poziomie 0 Rozważmy nieodwracalną historię przetwarzania: H: w1[x] r2[x] w2[x->y] c2 w1[z] a1 Powodem anomalii braku odtwarzalności jest to, że transakcja T2 czytająca dane z niezatwierdzonej transakcji (T1) została zatwierdzona w czasie działania transakcji T1. Blokowanie zasobów: Transakcja T1 ustawia blokadę X (EXCLUSIVE) na x oraz z. Po zmianie danej x blokada jest zmieniona na S (SHARED). Tak więc transakcja T2 może odczytać daną x. T2 ustawia więc blokadę S na x. Transakcja T2 ustawia blokadę X na daną y. Transakcja T2 jest zaakceptowana, a więc blokady są ściągane. Transakcja T1 odrzucona, a więc blokady są ściągane.
B2F realizacja poziomu izolacji 1 Dana zablokowana na czas realizacji operacji Read (blokada S) jest natychmiast odblokowywana po zakończeniu tej operacji. Dana zablokowana na czas realizacji operacji Write (blokada X) jest odblokowywana dopiero po zatwierdzeniu transakcji.
Nieodtwarzalne historie przetwarzania blokowanie zasobów na poziomie 1 Rozważmy nieodwracalną historię przetwarzania: H: w1[x] r2[x] w2[x->y] c2 w1[z] a1 Blokowanie zasobów: Transakcja T1 ustawia blokadę X (EXCLUSIVE) na x oraz z. Po zapisaniu danej x blokada jest nadal zachowana, a nie jak w przypadku poziomu 0 zmieniona na S (SHARED). Tak więc transakcja T2 nie może odczytać danej x. Transakcja T2 może ustawić blokadę X na daną y dopiero po zakończeniu T1.
Historie przetwarzania z anomalią powtórnego czytania blokowanie zasobów na poziomie 1 Rozważmy historię przetwarzania z anomalią powtórnego czytania: H: r1[x] w2[x] c2 r1[x] c1 Powodem występowania anomalii powtórnego czytania jest to, że dopuszczalne jest zapisywanie w nie zatwierdzonych transakcjach. Blokowanie zasobów: Transakcja T1 ustawia blokadę S (SHARED) na x. Po odczytaniu danej x blokada jest zwalniana. Transakcja T2 ustawia więc blokadę X (EXCLUSIVE) na daną x. Transakcja T2 zwalnia blokady, bo jest zatwierdzona. Transakcja T1 odczytuje wartość danej x, bo ma na niej blokadę S. Transakcja T1 zwalnia blokady.
B2F realizacja poziomu izolacji 2 i 3 B2F z poziomem izolacji 2: Zdejmowanie blokad następuje po zatwierdzeniu transakcji. B2F z poziomem izolacji 3: Dodatkowo utrzymywane są blokady sterowane przez warunki, tzn. zablokowana jest możliwość takich aktualizacji ( w tym dołączania), które wpływają na rekordy spełniające określony warunek.
Historie przetwarzania z anomalią powtórnego czytania blokowanie zasobów na poziomie 2 Rozważmy historię przetwarzania z anomalią powtórnego czytania: H: r1[x] w2[x] c2 r1[x] c1 Powodem występowania anomalii powtórnego czytania jest to, że dopuszczalne jest zapisywanie w nie zatwierdzonych transakcjach. Anomalię tę można wyeliminować zakładając, że zapisywanie danych wczytanych przez transakcję jest dopuszczalne dopiero wtedy, gdy transakcja ta została zatwierdzona. Blokowanie zasobów: Transakcja T1 ustawia blokadę S (SHARED) na x. Po odczytaniu danej x blokada nie jest zwalniana. Transakcja T2 ustawia więc blokadę X (EXCLUSIVE) na daną x dopiero po zatwierdzeniu T1.
Odtwarzanie bazy danych
Typy awarii Awaria twarda: uszkodzeniu uległy dane w pamięci zewnętrznej. Mechanizmami niezbędnymi do radzenia sobie z tego typu awariami jest replikacja danych, oprogramowania i sprzętu. Awaria miękka: dane w pamięci zewnętrznej nie uległy uszkodzeniu, awaria dotyczy najczęściej utraty danych w pamięci operacyjnej. Przyczynami są najczęściej błędy w oprogramowaniu, rzadziej zanik napięcia. W przypadku awarii miękkiej stosuje się taktykę polegającą na wyłączeniu serwera, zastosowaniu mechanizmów odtwarzania i restarcie serwera.
Problem odtwarzania bazy danych System musi być w stanie odtworzyć swój poprawny stan w sposób automatyczny, a więc bez interwencji człowieka. Operacja odtwarzania jest zwykle inicjowana automatycznie przy restarcie systemu. Odtwarzanie realizuje postulat trwałości ze zbioru postulatów ACID. Odtwarzanie dotyczy awarii miękkich.
Organizacja pamięci Pamięć chwilowa - znajduje się w pamięci operacyjnej. Służy do tymczasowego przechowywania danych pobieranych z bazy danych. Jest tracona w przypadku awarii miękkiej. Pamięć bazy danych pamięć stała, w której przechowywane są dane. Dziennik transakcji znajduje się w pamięci stałej. Zapisane są w nim operacje wykonane na bazie danych.
Transakcyjny charakter odtwarzania Transakcja stanowi podstawową jednostkę odtwarzania bazy danych po awarii. Jeżeli awaria nastąpiła pomiędzy zapisem do bufora a przeniesieniem jego zawartości do pamięci zewnętrznej, to musi zostać ustalony status transakcji, która tego zapisu dokonywała. Jeżeli została ona zatwierdzona, to wszystkie modyfikacje przez nią dokonane muszą zostać odtworzone (operacja redo). W przeciwnym wypadku wszystkie zmiany muszą być wycofane (operacja undo).
Dziennik transakcji Znajduje się w pamięci stałej. Zakładamy, że zapisane są w nim chronologicznie wszystkie ostatnio zatwierdzone wartości wszystkich danych bazy. Dzięki niemu możliwe jest określenie ostatnio zatwierdzonych danych. Zawartość dziennika może być określona w sposób następujący: <Id, T, X, v1, v2>, przy czym: Id identyfikator transakcji; T typ zapisu: modyfikacja, usunięcie, wstawienie; X modyfikowana dana; v1 wartość przed modyfikacją; v2 wartość po modyfikacji;
Punkty kontrolne (ang. Checkpoints) Oprócz wartości danych dziennik transakcji zawiera także: Informację o rozpoczęciu i zakończeniu transakcji; Punkty kontrolne Punkt kontrolny to moment, w którym następuje zapis stanu bazy danych. W tym momencie wszystkie bufory zostają zapisane do pamięci zewnętrznej. Stosowanie punktów kontrolnych pozwala ograniczyć zakres odtwarzania bazy i związanego z tym przetwarzania zapisów w dzienniku do czasu po ostatnim punkcie kontrolnym.
Techniki modyfikacji odroczona modyfikacja Odroczona modyfikacja polega na zapisie do bazy dopiero po zakończeniu całej transakcji lub w punkcie kontrolnym; Dla każdej transakcji protokół ten ma następujący przebieg: 1) w dzienniku zapisywana jest informacja o rozpoczęciu transakcji; 2) w dzienniku zapisywana jest informacja o dokonaniu wszelkich modyfikacji bez przenoszenia dokonanych zmian do pamięci zewnętrznej; 3) w momencie zatwierdzenia transakcji lub w punkcie kontrolnym wszystkie zapisy w dzienniku dotyczące transakcji są przenoszone na dysk i na tej podstawie dokonywane są rzeczywiste zmiany w bazie danych; 4) w przypadku odrzucenia transakcji wszystkie zmiany są pomijane.
Techniki modyfikacji odroczona modyfikacja (c.d.) W przypadku awarii cofamy się w dzienniku do ostatniego punktu kontrolnego i wykonujemy następujące operacje: 1) Każda transakcja, której zakończenie nastąpiło po ostatnim punkcie kontrolnym musi zostać powtórzona. 2) Procedura redo wykonuje wszystkie zapisy w bazie danych na podstawie obrazów pobranych z dziennika dla tej transakcji w tej samej kolejności, w jakiej były one zapisywane w dzienniku. 3) Jeżeli w trakcie odtwarzania nastąpi kolejna awaria operację odtwarzania można powtórzyć.
Techniki modyfikacji natychmiastowa modyfikacja Natychmiastowa modyfikacja polega na zapisaniu zmian do bazy od razu w momencie ich występowania; Dla każdej transakcji protokół ten ma następujący przebieg: 1) w dzienniku zapisywana jest informacja o rozpoczęciu transakcji; 2) w dzienniku zapisywana jest informacja o dokonaniu wszelkich modyfikacji; 3) po zapisaniu rekordu dziennika, zmiany są od razu przenoszone do pamięci zewnętrznej; 4) w przypadku zakończenia transakcji informacja o tym jest zapisywana w dzienniku.
Punkty kontrolne - przykład Zawartość logu: <T1, start> <T2, start> <T3, start> <T2, commit> <CHECKPOINT> <T4, start> <T1, commit> <T5, start> <T4, commit> -----------awaria Transakcje zakończone (bezpieczne): T2 Transakcje wymagające powtórzenia: T1, T4 (REDO T1, T4) Transakcje wymagające wycofania: T3, T5 (UNDO T3, T5)
Algorytm odtwarzania spójnego stanu b. d. po awarii Wszystkie transakcje wykonane przed ostatnim punktem kontrolnym uznawane są za zakończone. Wszystkie transakcje wykonane (COMMIT) pomiędzy ostatnim punktem kontrolnym a awarią są powtarzane (REDO). Wszystkie transakcje wykonywane do momentu awarii (brak COMMIT) są wycofywane (UNDO ROLLBACK).
SQL Server W punkcie kontrolnym są wykonywane następujące operacje: Zmiany są wpisywane do bazy niezależnie od stanu transakcji; Wszystko co jest zarejestrowane w logu transakcji jest wpisywane do bazy; Generowane są rekordy logu transakcji opisujące punkt kontrolny
Dziękuję za uwagę