Zarządzanie transakcjami Wykład S. Kozielski
Zarządzanie transakcjami Transakcja – jedna lub więcej operacji na bazie danych stanowiących pewną logiczną całość. Przykład transakcji: rezerwacja miejsc R: begin znajdź wolne miejsce m; rezerwuj znalezione miejsce dla pasażera p end;
Przykład transakcji: przeniesienie kwoty K z konta X na konto Y T: begin read X; X:=X-K; write X; read Y; Y:=Y+K; write Y end;
Pożądane własności transakcji 1.Atomowość – transakcja musi zostać wykonana w całości, albo wszystkie efekty jej częściowego wykonania muszą zostać wycofane 2.Spójność – transakcja nie może naruszać więzów spójności 3.Izolacja – transakcja musi działać w pełnej izolacji od innych transakcji. 4.Trwałość – wynik zakończonej transakcji nie może zostać utracony.
Środowisko realizacji transakcji Serwer SZBD Aplikacja 1 BD Aplikacja 2Aplikacja 3 stacja 1 stacja 2stacja 3
Harmonogram transakcji Uszeregowanie (kolejność wykonania) wszystkich operacji elementarnych pewnego zbioru transakcji realizowanych współbieżnie
Problemy ze współbieżnym wykonaniem transakcji Współbieżny harmonogram dwóch transakcji rezerwacji miejsc R1 - rezerwacja biletu 1R2 - rezerwacja biletu 2 znajdź wolne miejsce m 0 rezerwuj miejsce m 0 dla pasażera p1 rezerwuj miejsce m 0 dla pasażera p2
(H1) Harmonogram szeregowy T1T2 read A A:=A-100 write A read B B:=B+100 write B read B A 0 =1000 A=900B:=B-200 B 0 =2000 B=1900write B C 0 =3000 C=3200read C C:=C =6000 =6000 write C
(H2) Harmonogram szeregowalny T1T2 read A read B A:=A-100 B:=B-200 write A write B read B read C B:=B+100 C:=C+200 write B write C
(H3) Harmonogram nieszeregowalny T1T2 read A A:=A-100 read B write A B:=B-200 read B write B B:=B+100 read C write B C:=C+200 write C
Mechanizm blokowania dostępu do danych LOCK UNLOCK
Efekty wykonania LOCK X 1) sukces (udało się nałożyć blokadę) – transakcja uzyskuje prawo dostępu do jednostki X, 2) niepowodzenie (nie udało się nałożyć blokady) – brak prawa dostępu: - zawieszenie transakcji żądającej, lub - kontynuacja transakcji żądającej bez prawa dostępu do X.
Ziarnistość (granulacja) blokowania : - wiersz (rekord), - cała tablica, - cała baza danych
T1T2 lock A read A A:=A-100 lock B write A read B unlock A B:=B-200 lock B Zawieszenie T1 write B unlock B read B lock C B:=B+100 read C write B C:=C+200 unlock B write C unlock C
U: begin V: begin lock Y; lock X; read Y;read X; unlock Y;unlock X; lock X;lock Y; read X; read Y; X:=X+Y; Y:=Y+X; write X; write Y; unlock X unlock Y end; end; X 0 =20, Y 0 =30 H1: U;V: X=50, Y=80 H2: V;U: X=70, Y=50
UV lock Y read Y unlock Y lock X read X unlock X lock Y read Y Y:=Y+X write Y unlock Y lock X read X X:=X+Y write X unlock X H3: X=50, Y=50
Dwufazowy protokół blokowania Transakcja wypełnia protokół dwufazowy, jeśli wszystkie operacje blokowania występują przed pierwszą operacją odblokowania. Twierdzenie Dowolny harmonogram transakcji dwufazowych jest harmonogramem szeregowalnym.
UV lock Y read Y lock X unlock Y lock X Zawieszenie transakcji V read X X:=X+Y write X unlock X read X lock Y unlock X read Y Y:=Y+X write Y unlock Y H4 H1
Inny model blokowania RLOCK (read-lock) – blokowanie do odczytu (blokada współdzielona - shared), WLOCK (write-lock) – blokowanie do zapisu (blokada wyłączna - exclusive). UNLOCK
Wyróżnianie transakcji w programach 1) Domyślne każda instrukcja SQL jest transakcją, 2) Jawne: [BEGIN TRANSACTION]- początek, COMMIT [TRANSACTION] - koniec – zatwierdzenie transakcji, ROLLBACK [TRANSACTION]- koniec – wycofanie transakcji.
Prowadzenie dziennika transakcji Serwer SZBD Menedżer Transakcji Aplikacja 1 BD Aplikacja 2Aplikacja 3 stacja 1 stacja 2stacja 3 Log dziennik transakcji
T:begin begin transaction; find X; if not found then rollback else begin lock X; get X; X:=X-K; write X; find Y; if not found then rollback else begin lock Y; get Y; Y:=Y+K; write Y; commit end end;
Model z bezpośrednim zapisem do bazy danych
Stan dziennika po wycofaniu transakcji
Stan dziennika po awarii
Model z opóźnionym zapisem do bazy danych
Punkty kontrolne (CHECKPOINT) Wykonanie przerwania związanego z punktem kontrolnym: – dokończenie aktualnych operacji na bazie danych i/lub logu – przejście do obsługi przerwania Obsługa przerwania (obsługa punktu kontrolnego): – zapis zawartości buforów na dysk (do bazy danych) – wpis do dziennika transakcji (logu) rekordu
Punkty kontrolne - przykład Zawartość logu: 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 1)Wszystkie transakcje wypełnione przed ostatnim punktem kontrolnym uznawane są za zakończone 2)Wszystkie transakcje wypełnione (COMMIT) pomiędzy ostatnim punktem kontrolnym a awarią są powtarzane (REDO) 3)Wszystkie transakcje wykonywane do momentu awarii (brak COMMIT) są wycofywane (UNDO – ROLLBACK)
Wykorzystanie dziennika do ochrony bazy danych - podsumowanie 1) Wycofanie transakcji z poziomu programu (aplikacji), (niedostępność danych,...) 2) Wycofanie transakcji z poziomu SZBD, (zakleszczenie transakcji, zawieszenie transakcji,...) 3) Odtworzenie spójnego stanu b.d. po awarii i upadku systemu 4) Odtworzenie b.d. i przywrócenie jej spójnego stanu po zniszczeniu dysku z bazą danych (dziennik ocalał)
BD Log BACKUP
BD Log BACKUP RESTORE BD
Odtworzenie spójnego stanu b.d. po awarii dysku BD Log BACKUP RESTORE ROLLFORWARD BD
Mechanizmy blokad w SQL-u – poziomy izolacji Generalna zasada: - zapis (modyfikacja) – wiersz (rekord) blokowany jest na wyłączność do końca transakcji, - odczyt – wybór rodzaju blokady i zakres utrzymywania zależy od poziomu izolacji. Poziom izolacji może ustalać programista: SET TRANSACTION ISOLATION LEVEL
Poziomy izolacji Poziom izolacjiEfekt niepożądany READ UNCOMMITTED brudny odczyt READ COMMITTED niepowtarzalny odczyt REPEATABLE READ fantom SERIALIZABLE