320 likes | 522 Views
Transakcje. Wykład 11 Prowadzący: dr Paweł Drozda. Algorytmy zarządzania współbieżnym wykonaniem transakcji. blokowanie - uszeregowanie transakcji wynika z kolejności uzyskiwanych blokad znaczników czasowych – uszeregowanie wynika z wartości znaczników czasowych związanych z transakcjami
E N D
Transakcje Wykład 11 Prowadzący: dr Paweł Drozda
Algorytmy zarządzania współbieżnym wykonaniem transakcji • blokowanie - uszeregowanie transakcji wynika z kolejności uzyskiwanych blokad • znaczników czasowych – uszeregowanie wynika z wartości znaczników czasowych związanych z transakcjami • optymistyczne – walidacja poprawności uszeregowania dr Paweł Drozda
Metody znaczników czasowych (1) • znacznik czasowy (TS) – unikalny identyfikator wyznaczający kolejność transakcji (wg kolejności uruchomienia) • generowane przez zegar bądź przez licznik (poprzez zwiększenie o jeden) • znaczniki czasowe jednostek danych: • ReadTS(x) – znacznik ostatniej transakcji czytającej x • WriteTS(x) – znacznik ostatniej transakcji piszącej do x dr Paweł Drozda
Metody znaczników czasowych (2) • Algorytm • T chce odczytać x • jeśli TS(T) < WriteTS(x), to T wycofywana i restartowana z nowym TS(T) • gdy TS(T) >= WriteTS(x), to T czyta x; wartość ReadTS(x)= max(TS(T),ReadTS(x)) • T chce pisać do x • jeśli TS(T) < WriteTS(x) lub TS(T) < ReadTS(x), to T wycofywana i restartowana z nowym TS(T) • wpp T pisze do x; WriteTS(x)=TS(T) dr Paweł Drozda
Metody znaczników czasowych (3) • Zasada zapisu Thomasa (modyfikacja podstawowej metody) • T chce pisać do x • jeśli TS(T) < WriteTS(x) – można pominąć operację zapisu do x (wartość jest przestarzała – później uruchomiona transakcja zmodyfikowała tą wartość) • pozostałe przypadki bez zmian • zapewnia szerszy wielodostęp • nie odrzuca transakcji z niepotrzebnymi zapisami (tylko nie dokonuje zapisu) dr Paweł Drozda
Metoda znaczników czasowych – przykład (1) T1 T2 T3 start r(x) x=x+10 w(x) t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 start r(y) y=y+20 w(y) start start r(y) y=y+30 w(y) dr Paweł Drozda
Metoda znaczników czasowych – przykład (2) T1 T2 T3 t12 t12 t14 t15 t16 t17 t18 t19 z=50 w(z) commit z=100 w(z) commit r(y) y=y+20 w(y) commit dr Paweł Drozda
Podstawowa metoda znaczników czasowych - cechy • gwarantuje szeregowalność transakcji - transakcje wykonywane według znaczników czasowych • nie gwarantuje odtwarzalności harmonogramu przykład: H1= w1(x)r2(x)w2(x)c2a1, gdzie TS(T1)< TS(T2) dr Paweł Drozda
Modyfikacja metody • Zapewnienie odtwarzalności – konieczna modyfikacja metody • główna idea – buforowanie operacji odczytu i zapisu aż do momentu zatwierdzenia transakcji • T1 zapisuje x: WriteTS(x) – aktualizowany, x – zmieniony dopiero po zatwierdzeniu transakcji T1 • T2 odczytuje daną x zaktualizowaną przez T1: gdy warunek odczytu jest spełniony to odczyt odsunięty do momentu zatwierdzenia T1 dr Paweł Drozda
Algorytmy optymistyczne (1) • Trzy stany: • Faza odczytu – modyfikacje przechowywane w obszarach roboczych transakcji • Faza walidacji – badanie uszeregowalności transakcji; transakcje niespełniające uszeregowalności wycofywane i restartowane • Faza zapisu – po pomyślnej walidacji modyfikacje wprowadzane do bazy dr Paweł Drozda
Algorytmy optymistyczne (2) • Faza walidacji – określa czy transakcje mogą spowodować kolizję • znaczniki czasowe dla transakcji: • start(T) – rozpoczęcie transakcji • validation(T) – rozpoczęcie walidacji • finish(T) – po zakończeniu transakcji • walidacja pomyślna gdy: • finish(S)<start(T) – sekwencyjnie lub: • jeśli start(T)<finish(S) to: • dane zapisywane przez wcześniejszą transakcję nie mogą zawierać danych zapisywanych przez bieżącą transakcję • finish(S)<validation(T) dr Paweł Drozda
Algorytmy optymistyczne (3) • efektywne – gdy konflikty rzadkie • gdy wycofania częste – algorytm nieefektywny • szerszy wielodostęp w porównaniu do blokowania dr Paweł Drozda
Ziarnistość danych (1) • założenie algorytmów – dostęp transakcji do pewnej jednostki danych • Elementy bazy danych (ziarnistość): • cała baza • plik • strona (sektor na dysku) • rekord • wartość w polu rekordu dr Paweł Drozda
Ziarnistość (2) - blokady • Ziarnistość dla blokowania: • czy blokować całą bazę – czy poszczególne pola rekordów? • im większa część blokowana – większe prawdopodobieństwo zakleszczenia, węższy wielodostęp • większa część bazy modyfikowana – szybsze blokowanie całej bazy niż poszczególnych rekordów • wybór w zależności od transakcji dr Paweł Drozda
Hierarchia jednostek blokowania Baza danych Poziom 0 Plik3 Plik1 Plik2 Poziom 1 Strona2 Strona3 Strona1 Poziom 2 Rekord1 Rekord2 Poziom 3 Pole1 Pole2 Poziom 4 dr Paweł Drozda
Ziarnistość - blokowanie • zablokowany węzeł zablokowane następniki (gdy zablokowany rekord1 zablokowane również pole1, pole2) • żądanie zablokowania węzła – konieczne sprawdzenie czy któryś z następników nie został zablokowany • efektywne przeszukanie następników – blokowanie jednostek hierarchicznych dr Paweł Drozda
Blokowanie jednostek hierarchicznych • blokada intencjonalna – blokada zakładana na każdy węzeł nadrzędny np. przy blokowaniu Strona1 blokada intencjonalna założona na Plik2, baza danych • typy blokad intencjonalnych intencjonalna do odczytu IR intencjonalna do zapisu IW wszystkie elementy do odczytu i intencjonalna do zapisu RIW dr Paweł Drozda
Kompatybilność blokad dr Paweł Drozda
Szeregowalność blokowania hierarchicznego • warunki szeregowalności: • transakcja nie może blokować, jeśli coś odblokowała • transakcji nie wolno zablokować węzła, jeśli nie zablokuje jego bezpośredniego poprzednika blokadą intencjonalną • przed odblokowaniem węzła muszą zostać odblokowani wszyscy poprzenicy • zakleszczenia obsługiwane jak wcześniej dr Paweł Drozda
Poziomy izolacji (1) • Większość SZBD nie zapewnia szeregowalności transakcji • Poziom izolacji wprowadzany do znalezienia kompromisu pomiędzy współbieżnością a poprawnością wykonania transakcji • Możliwe poziomy izolacji: • READ UNCOMMITTED • READ COMMITED • REPEATABLE READ • SERIALIZABLE dr Paweł Drozda
Poziomy izolacji (2) • SERIALIZABLE • Odczytuje wyłącznie dane zatwierdzone • Do momentu zakończenia transakcji żadna dana nie zostanie zmieniona przez inną transakcje • Blokuje dostęp do tabeli • Zapewnia szeregowalność • REPEATABLE READ • Tak samo jak SERIALIZABLE – tylko, że blokuje dostęp do danych a nie całej tabeli • Pojawia się problem „fantomów” – gdy jedna transakcja czyta dane, druga w tym samym czasie dodaje lub uaktualnia dr Paweł Drozda
Poziomy izolacji (3) • READ COMMITTED • Odczytuje tylko zatwierdzone dane • Zapisane dane nie zostaną zmienione przez inną transakcję do momentu zakończenia transakcji • Brak gwarancji, że dane odczytane nie zostaną zmienione przez inną transakcję • Problem niepowtarzalnego odczytu – gdy ta sama dana jest czytana dwa razy a w międzyczasie inna transakcja ją modyfikuje dr Paweł Drozda
Poziomy izolacji (4) • READ UNCOMMITTED • Dopuszczenie odczytywania danych, które zostały zmienione przez niezatwierdzone transakcje – może czytać dodane wiersze które później będą wycofane (Czytanie na brudno) • Najniższy poziom izolacji • Poziom izolacji SQL – ustawiany przed uruchomieniem transakcji SET TRANSACTION ISOLATION LEVEL (SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED) dr Paweł Drozda
Poziomy izolacji - zestawienie dr Paweł Drozda
Transakcje – SQL (1) • Dostępne dla parametru engine ustawionego na InnoDB (podobnie jak przy wymuszaniu więzów integralności referencyjnej) CREATE TABLE Studenci(…) engine=InnoDB; • Dwa tryby pracy z transakcjami • autocommit – każda operacja od razu zatwierdzana (chyba, że się zaznaczy transakcje) • Bez autocommit – możliwość grupowania poleceń w transakcję (konieczność potwierdzania commit lub wycofania rollback) dr Paweł Drozda
Transakcje – SQL (2) • Ustawienie autocommit: • SET AUTOCOMMIT =1; - domyślnie • SET AUTOCOMMIT =0; - możliwość grupowania instrukcji w transakcje • Zmiana ustawienia na stałe: • Zapis w pliku my.ini lub my.cnf w sekcji [mysqld] init_connect=‘SET AUTOCOMMIT=0’ • Sprawdzenie ustawienia trybu autocommit: • SELECT @@AUTOCOMMIT; dr Paweł Drozda
Transakcje SQL (3) • Polecenia: • START TRANSACTION – rozpoczyna transakcje • AUTOCOMMIT=0 – START TRANSACTION niepotrzebne – uruchamiane automatycznie • AUTOCOMMIT=1 – START TRANSACTION uruchamia transakcje, COMMIT lub ROLLBACK kończy blok transakcji • COMMIT – zatwierdza wykonanie transakcji • ROLLBACK – wycofuje transakcje dr Paweł Drozda
Transakcja przykład Student(id,nazwisko,rok) SET AUTOCOMMIT=0; UPDATE Student set rok=rok+1; INSERT INTO Student VALUES(123,’Nowak’,3); EXIT; - zmiany niezachowane COMMIT; EXIT; - zmiany zachowane SET AUTOCOMMIT=1; UPDATE Student set rok=rok+1; START TRANSACTION; INSERT INTO Student VALUES(123,’Nowak’,3); ROLLBACK; insert niezachowany, update zachowany dr Paweł Drozda
Transakcje SQL (4) • Blokowanie wierszy dla InnoDB: • Blokowanie do aktualizacji: • SELECT … FROM … WHERE … FOR UPDATE; • Blokowanie do czytania: • SELECT … FROM … WHERE … LOCK IN SHARE MODE; dr Paweł Drozda
Transakcje - przykład AUTOCOMMIT=1; BEGIN TRANSACTION; SELECT rok FROM Student FOR UPDATE; UPDATE Student SET rok=rok+1; COMMIT; AUTOCOMMIT=1; BEGIN TRANSACTION; SELECT * FROM Student WHERE nazwisko=‘kowal’ LOCK IN SHARE MODE; INSERT INTO Oceny VALUES(1,2,4); COMMIT; dr Paweł Drozda
Transakcje SQL (5) • Blokowanie tabel – dla parametru engine ustawionego na MyISAM – domyślnie • Polecenia: • LOCK TABLES tabela1 typBlokady, …; • typBlokady = READ|WRITE • UNLOCK TABLES; - odblokowuje dostęp do tabel dr Paweł Drozda
Transakcje – przykład Sesja1 sesja2 LOCK TABLES Student READ, Oceny WRITE; SELECT * FROM Student; - zostanie wykonana SELECT * FROM Oceny; - czeka na odblokowanie tabeli Oceny UNLOCK TABLES; wykonanie zapytania dr Paweł Drozda