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.
Download
Report
Transcript 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.
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
t1
start
t2
r(x)
t3
x=x+10
t4
w(x)
t5
T2
T3
start
r(y)
start
t6
t7
y=y+20
t8
w(y)
r(y)
t9
y=y+30
t10
w(y)
t11
start
dr Paweł Drozda
Metoda znaczników czasowych –
przykład (2)
T1
T2
T3
t12
z=100
t12
w(z)
t14
z=50
t15
w(z)
t16
commit
commit
r(y)
t17
y=y+20
t18
w(y)
t19
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
Plik1
Plik2
Plik3
Poziom 1
Strona1
Strona2
Strona3
Poziom 2
Rekord1
Pole1
Rekord2
Poziom 3
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
IR
IW
R
RIW W
IR
Ok.
Ok.
Ok.
Ok.
X
IW
Ok.
Ok.
X
X
X
R
Ok.
X
Ok.
X
X
RIW Ok.
X
X
X
X
W
X
X
X
X
X
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
Czytanie na
brudno
Niepowtarzalny
odczyt
Fantom
READ
UNCOMMITED
możliwe
możliwe
możliwe
READ
COMMITED
Nie występuje
możliwe
możliwe
REPEATABLE
READ
Nie występuje
Nie występuje
możliwe
SERIALIZABLE Nie występuje
Nie występuje
Nie
występuje
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