Przetwarzanie transakcyjne Wielodostp i ochrona przed awariami Transakcja

  • Slides: 22
Download presentation
Przetwarzanie transakcyjne Wielodostęp i ochrona przed awariami

Przetwarzanie transakcyjne Wielodostęp i ochrona przed awariami

Transakcja Logiczna jednostka pracy w SZBD. Program, instrukcja, czy inny ciąg operacji odwołujący się

Transakcja Logiczna jednostka pracy w SZBD. Program, instrukcja, czy inny ciąg operacji odwołujący się do bd, który powinien być: • niepodzielny (atomicity); • przeprowadzający bazę danych ze stanu spójnego w spójny (consistency); • dający użytkownikom wrażenie indywidualnego dostępu do bazy (independence); • gwarantujący trwałość wykonanych operacji (durability). [ACID]

Niepodzielność transakcji Niech transakcja T będzie sekwencją elementarnych operacji I 1, I 2, .

Niepodzielność transakcji Niech transakcja T będzie sekwencją elementarnych operacji I 1, I 2, . . . , In. Zdarzenia uniemożliwiające wykonanie całej T: • przerwanie przez użytkownika; • błąd operacji (np. brak prawa do danych) • kolizja z innymi transakcjami (np. blokada i zagłodzenie); • awaria pamięci operacyjnej i utrata jej zawartości; • awaria pamięci zewnętrznej i utrata jej zawartości. W każdym z tych przypadków transakcja przerwana przez zdarzenie musi być w całości wycofana. Potem ewentualnie powtórzona (wznowiona).

Sterowanie transakcjami w SQL • COMMIT - zatwierdza (wypełnia) aktualną transakcję i rozpoczyna kolejną;

Sterowanie transakcjami w SQL • COMMIT - zatwierdza (wypełnia) aktualną transakcję i rozpoczyna kolejną; • ROLLBACK - wycofuje aktualną transakcję i rozpoczyna kolejną; • BEGIN TRANSACTION (w niektórych systemach) - jawnie rozpoczyna transakcję; • Zazwyczaj połączenie z bazą rozpoczyna pierwszą transakcję, a zamknięcie połączenia kończy (COMMIT) ostatnią.

Wypełnianie/wycofywanie transakcji • Transakcja może przeprowadzać zmiany na "prywatnych" kopiach danych, które zapisuje do

Wypełnianie/wycofywanie transakcji • Transakcja może przeprowadzać zmiany na "prywatnych" kopiach danych, które zapisuje do bazy dopiero w momencie wypełnienia; w przypadku wycofania nie zapisuje zmian; • System może prowadzić dziennik (LOG), w którym zapisuje zmiany dokonane przez transakcję na każdej jednostce danych (wartość starą i nową). Transakcja dokonuje zapisów w bazie danych. W razie potrzeby wycofania, stare wartości jednostek są odtwarzane na podstawie zapisów z dziennika.

Spójność transakcji • System kontroluje, czy transakcja nie narusza zdefiniowanych więzów (klucza, integralności referencyjnej,

Spójność transakcji • System kontroluje, czy transakcja nie narusza zdefiniowanych więzów (klucza, integralności referencyjnej, asercji (? ) itp. ). W razie ich naruszenia wycofuje transakcję. • Użytkownik (lub aplikacja) musi kontrolować pozostałe warunki spójności i to na niego spada odpowiedzialność za ich zachowanie.

Wielodostęp - pogodzenie działań wielu transakcji • T=(I 1, I 2, I 3, I

Wielodostęp - pogodzenie działań wielu transakcji • T=(I 1, I 2, I 3, I 4), S=(J 1, J 2, J 3) • Harmonogram: I 1, I 2, J 1, I 3, J 2, J 3, I 4 • Harmonogram sekwencyjny: I 1, I 2, I 3, I 4, J 1, J 2, J 3 lub J 1, J 2, J 3, I 1, I 2, I 3, I 4 • Harmonogram szeregowalny - taki, którego wynik działania jest równoważny pewnemu harmonogramowi sekwencyjnemu.

Schemat problemu szeregowalności • Baza danych: zbiór jednostek (A, B, C, . . .

Schemat problemu szeregowalności • Baza danych: zbiór jednostek (A, B, C, . . . ); • Jedna operacja: { read | write } A; • Harmonogram H (być może niesekwencyjny) transakcji T 1, T 2, . . . jest równoważny harmonogramowi sekwencyjnemu Hs, jeżeli: – jeżeli Ti czyta w H wartość jednostki A zapisaną przez Tj, to tak samo jest w Hs (Tj: write A < Ti: read A) ; – jeżeli Ti (czyta i ) zapisuje w H wartość jednostki A po zapisaniu jej przez Tj, to tak samo jest w Hs (Tj: write A < Ti: write A); – jeżeli Ti czyta w H wartość jednostki A przez zapisaniem jej przez Tj, to tak samo jest w Hs (Ti: read A < Tj: write A);

Graf szeregowalności • G=(V, E) dla harmonogramu H transakcji {T 1, T 2, .

Graf szeregowalności • G=(V, E) dla harmonogramu H transakcji {T 1, T 2, . . . , Tn} • V={T 1, T 2, . . . , Tn} • (Ti, Tj) E wtedy i tylko wtedy, gdy istnieje jednostka A, taka że: – Ti czyta A zanim Tj ją zapisze lub – Ti zapisuje A zanim Tj ją przeczyta/zapisze • Harmonogram H jest szeregowalny wtedy i tylko wtedy, gdy transakcje {T 1, . . . , Tn} można uporządkować zgodnie z grafem G, tzn. istnieje porządek liniowy transakcji zgodny z porządkiem zadanym przez krawędzie grafu G.

Nieszeregowalność - utracone zmiany 1) T 1: read A 2) T 2: read A

Nieszeregowalność - utracone zmiany 1) T 1: read A 2) T 2: read A 3) T 2: A = A + 20 4) T 1: A = A * 1, 10 5) T 2: write A(commit) 6) T 1: write A (commit) A=100 120 110 A=120 A=110 Niech początkowo A=100. W powyższym harmonogramie na koniec A=110, a powinno być A=130 (T 1, T 2) lub A=132 (T 2, T 1). Analiza grafu dla powyższego harmonogramu także wykazuje jego nieszeregowalność.

Nieszeregowalność – „brudne dane” 1) T 1: read A 2) T 1: A=A+20 3)

Nieszeregowalność – „brudne dane” 1) T 1: read A 2) T 1: A=A+20 3) T 1: write A 4) T 2: read A 5) T 2: A=A*1, 10 6) T 2: write A (commit) 7) T 1: rollback A=100 120 A=120 132 A=132 Efektem powyższego harmonogramu powinno być wykonanie tylko transakcji T 2 (A=110). Błąd pojawił się, ponieważ pozwoliliśmy T 2 czytać "brudne" dane utworzone przez transakcję T 1 - niewypełnioną.

Nieszeregowalność - niepowtarzalny odczyt 2) 3) 4) 5) 6) 7) T 1: T 1:

Nieszeregowalność - niepowtarzalny odczyt 2) 3) 4) 5) 6) 7) T 1: T 1: 1) T 2: read A (suma+=A); read A; A = A - 10; write A; read B; B = B +10; write B; 8) T 2: read B (suma+=B) suma = 100 A = 100 90 A = 90 B = 200 210 B = 210 suma = 310 Transakcja T 2 dokonująca bilansu czyta wartości A i B z różnych momentów, czyli jej wynik nie odpowiada bilansowi z żadnego konkretnego momentu czasu. Graf szeregowalności ewidentnie wykazuje tę sytuację. Fantomy to krotki spelniajace warunek selekcji i wstawione do tabeli w “miedzyczasie”. Niepowtarzalny odczyt, to sytuacja, gdy transakcja czyta dwuktrotnie te sama krotke i widzi za kazdym razem inna wartosc.

Kontrola wielodostępu • Metody blokad Transakcja przed uzyskaniem dostępu do jednostki musi ją odpowiednio

Kontrola wielodostępu • Metody blokad Transakcja przed uzyskaniem dostępu do jednostki musi ją odpowiednio zablokować (do odczytu lub do zapisu). System zwalnia jednostkę dopiero po dokonaniu modyfikacji przez transakcję; ewentualnie później – po upewnieniu się, że transakcja zostanie wypełniona) • Metody znaczników czasowych (stempli) Transakcja ma przypisany znacznik czasowy. Zostawia go przy każdej jednostce, do której się odwołuje (czyta lub modyfikuje). System pilnuje, by transakcje odwoływały się do jednostek w porządku chronologicznym zgodnym ze znacznikami.

Metoda blokad • Blokada do odczytu (dzielona): RLOCK (SHARED LOCK); • Blokada do zapisu

Metoda blokad • Blokada do odczytu (dzielona): RLOCK (SHARED LOCK); • Blokada do zapisu (wyłączna): LOCK (EXCLUSIVE LOCK); • Transakcja poprzedza operacje na jednostce założeniem odpowiedniej blokady. RLOCK nie zapobiega założeniu takiej samej (RLOCK) blokady przez inne transakcje. LOCK uniemożliwia założenie jakiejkolwiek (RLOCK lub LOCK) blokady przez inną transakcję. Transakcja zwalnia swoją blokadę po zakończeniu operacji.

Metoda blokad - problemy • Szeregowalność harmonogramu w metodzie blokad możemy badać na podstawie

Metoda blokad - problemy • Szeregowalność harmonogramu w metodzie blokad możemy badać na podstawie grafu analogicznego jak graf szeregowalności (traktując LOCK jak write, a RLOCK jak read). Jest to kłopotliwe, bo graf trzeba zmieniać dynamicznie. • Anulowanie kaskadowe - jeżeli transakcja T 1 zwolniła jednostkę A przez wypełnieniem się, a T 2 ją przeczytała i zmodyfikowała B, którą przeczytała T 3, to wycofanie T 1 powoduje konieczność wycofania T 2, to z kolei implikuje wycofanie T 3. Problem ten wynika z czytania brudnych danych przez transakcje. • W metodzie blokad możliwe jest zakleszczenie (T 1 blokuje A i czeka na B, T 2 odwrotnie) i zagłodzenie (T 1 zawsze jest uprzedzana przydziale blokady jednostki przez inną transakcję).

Metoda blokad - protokoły • Blokowanie dwufazowe (2 PL) - transakcja najpierw zakłada blokady

Metoda blokad - protokoły • Blokowanie dwufazowe (2 PL) - transakcja najpierw zakłada blokady (faza wzrostu), a potem je zwalnia (faza zmniejszania); Jeżeli wszystkie transakcje przestrzegają 2 PL, to ich harmonogram jest szeregowalny. • Blokowanie ściśle dwufazowe (rigorous i strict 2 PL) j. w. + transakcje zwalniają blokady dopiero w momencie wypełnienia. W ten sposób w bazie nie ma brudnych danych i nie występuje anulowanie kaskadowe. Odmianą tego protokołu jest trzymanie do momentu wypełnienia tylko blokad wyłącznych.

Zakleszczenie i zagłodzenie • Zakleszczeniu można zapobiegać: – wykluczając transakcję oczekującą na blokadę po

Zakleszczenie i zagłodzenie • Zakleszczeniu można zapobiegać: – wykluczając transakcję oczekującą na blokadę po określonym czasie; – badając przed przydzieleniem blokady, czy nie spowoduje ona zakleszczenia (czy w grafie oczekiwań nie powstanie cykl); – okresowo badając graf oczekiwań i usuwając zakleszczenie, gdy zostanie wykryte poprzez wycofanie jednej z biorących w nim udział transakcji. • Zagłodzeniu zapobiegamy zwiększając z czasem priorytet transakcji.

Metoda znaczników czasowych • Każda transakcja T otrzymuje unikalny znacznik time(T) - zazwyczaj zgodny

Metoda znaczników czasowych • Każda transakcja T otrzymuje unikalny znacznik time(T) - zazwyczaj zgodny z momentem uruchomienia transakcji w systemie. • Każda jednostka A ma dwa znaczniki: – rtime(A) - znacznik ostatniej transakcji, która czytała A; – wtime(A) - znacznik ostatniej transakcji, która zapisała A.

Metoda znaczników czasowych -cd. • T chce czytać A: – jeżeli time(T)>wtime(A), to OK

Metoda znaczników czasowych -cd. • T chce czytać A: – jeżeli time(T)>wtime(A), to OK i rtime(T)=max(time(T), rtime(A)); – jeżeli time(T)<wtime(A), to wycofujemy T (i ewentualnie uruchamiamy ponownie z większym znacznikiem czasowym); • T chce zapisać A: – jeżeli time(T)>rtime(A) i time(T)>wtime(A), to T zapisuje A i wtime(A)=time(T); – jeżeli time(T)>rtime(A) i time(T)<wtime(A), to pomijamy zapis dokonywany przez T i kontynuujemy; – jeżeli time(T)<rtime(A), to wycofujemy T (i ewentualnie uruchamiamy ponownie z większym znacznikiem czasowym);

Metoda znaczników czasowych • Gwarantuje szeregowalność harmonogramu (zgodność z harmonogramem sekwencyjnym odpowiadającym znacznikom czasowym);

Metoda znaczników czasowych • Gwarantuje szeregowalność harmonogramu (zgodność z harmonogramem sekwencyjnym odpowiadającym znacznikom czasowym); • Nie zapobiega anulowaniu kaskadowemu; • Istnieje modyfikacja tej metody polegająca na przechowywaniu wielu wersji czasowych jednostki, które mogą czytać transakcje spóźnione (Oracle) i które można tworzyć w porządku niechronologicznym (ale OSTROŻNIE !!!)

Szeregowalność w SQL (SQL 99) SET TRANSACTION [READ ONLY | READ WRITE] [ISOLATION LEVEL

Szeregowalność w SQL (SQL 99) SET TRANSACTION [READ ONLY | READ WRITE] [ISOLATION LEVEL { READ UNCOMMITED | READ COMMITED | REPEATABLE READ | SERIALIZABLE} Poziom niezależności WLOCK do RLOCK do wypełnienia LOCK na całe tabele do wypełnienia READ UNCOMMITED Nie - read only NIE READ COMMITED TAK NIE REPEATABLE READ TAK NIE SERIALIZABLE TAK TAK wypełnienia

Trwałość danych • Dziennik - plik, w którym są zapisywane wszystkie zmiany dokonywane przez

Trwałość danych • Dziennik - plik, w którym są zapisywane wszystkie zmiany dokonywane przez transakcje w formacie: (id. Transakcji, id. Jednostki, stara. Wartość, nowa. Wartość) • Punkt kontrolny (check point) - moment odnotowywany w dzienniku, w którym cała baza jest kopiowana do pamięci zewnętrznej. Dobrze, gdy w tym momencie nie ma żadnej czynnej transakcji i baza jest zapisywana w spójnym stanie. • Kopia archiwalna - spójny obraz bazy danych w bezpiecznej pamięci.