Bazy danych – wykład dziewi ˛
aty
Transakcje
Konrad Zdanowski
Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
1 / 42
Outline
1
2
Szeregowalno´s´c
Blokady
Zakleszczenia
Misc
3
Transakcje i blokady w BD Oracle
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
2 / 42
Problemy współbie˙zno´sci
Je´sli BD komunikuje si ˛e tylko z jednym u˙zytkownikiem, nie
powstaje problem konfliktowych operacji.
W praktyce BD musz ˛
a cz ˛esto zapewnia´c równoległo´s´c dost ˛epu.
Przykłady: rezerwacje biletów, operacje bankowe, sklepy
internetowe, ...
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
3 / 42
Problemy współbie˙zno´sci
Rozwa˙zmy dwie transakcje:
T
1
: read(X), write(X,1), read(Y), write(Y,2);
T
2
: read(X), write(X,4), read(Y), write(Y,3);
Jak ˛
a warto´s´c bed ˛
a miały X i Y po zako ´nczeniu działania T
1
i T
2
?
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
4 / 42
Problemy współbie˙zno´sci
Rozwa˙zmy ci ˛
ag operacji transakcji
T
1
i
T
2
:
1
Wczytaj wolne miejsca
,
2
Wczytaj wolne miejsca
,
3
Rezerwuj miejsce 13
,
4
Rezerwuj miejsce 13
.
Nie chcemy, ˙zeby
T
2
zapisała miejsce zaj ˛ete ju˙z przez
T
1
.
Nie byłoby problemu, gdyby transakcje wykonywane były jedna po
drugiej (nierealne).
Transakcja
T
1
powinna zablokowa´c zaj ˛ety rekord, transakcja
T
2
powinna by´c wycofana (ale nie warto zakłada´c blokady na
wszystkie
wolne miejsca przed wczytaniem ich przez
T
1
.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
5 / 42
Transakcje
Definicja 1
Transakcja jest to ci ˛
ag operacji na bazie danych, które powinny by´c
wykonane w sposób atomowy, jak jedna instrukcja.
Je´sli nie b ˛edzie mo˙zna wykonac jednej z instrukcji w transakcji,
trzeba anulowa´c efekt wszystkich.
Standard SQL domy´slnie wymaga, ˙zeby transakcje traktowa´c jako
przetwa˙zane szeregowo. W praktyce implementacje BD pozwalaj ˛
a
na osłabienie tego wymagania w celu zwi ˛ekszenia efektywno´sci.
Transakcje zatwierdzamy przez
commit, anulujemy przez
rollback.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
6 / 42
Własno´sci transakcji – ACID
Atomowo´s´c (atomicity) – transakcja wykona si ˛e albo w cało´sci
albo wcale,
Spójno´s´c (consistency) – przeprowadzi baz ˛e danych ze stanu
spójnego do spójnego,
Isolacja (isolation) – wynik jej działania b ˛edzie niezale˙zny od
innych działaj ˛
acych w tym czasie transakcji,
Trwało´s´c (durability) – wyniki jej działania s ˛
a trwałe.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
7 / 42
Przyczyny konfliktów
Je´sli dwie transakcje chc ˛
a zapisa´c ten sam rekord, to wchodz ˛
a ze
sob ˛
a w konflikt.
´
Zródłem problemów jest te˙z sytuacja, w której jedna transakcja
zapisuje dane, które chce odczyta´c druga.
Je´sli dwie transakcje tylko odczytuj ˛
a dane, to nie mog ˛
a wej´s´c ze
sob ˛
a w konflikt.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
8 / 42
Outline
1
2
Szeregowalno´s´c
Blokady
Zakleszczenia
Misc
3
Transakcje i blokady w BD Oracle
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
9 / 42
Odczyt „brudnych danych”
Rozwa˙zmy scenariusz:
T
1
T
2
update Miejsca set zajete = true
where numer = 13;
select numer from Miejsca
where zajete = false;
no rows selected
.
rollback;
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
10 / 42
Odczyt „brudnych danych”
Definicja 2
Odczyt „brudnych danych” ma miejsce kiedy jedna transakcja
odczytuje dane, które zmieniła druga transakcja, która została potem
wycofana.
Uwaga. To sie nie ma prawa zda˙zy´c w BD Oracle.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
11 / 42
Niepowtarzalny odczyt
Rozwa˙zmy scenariusz:
T
1
T
2
select min(a) from r;
MIN(A): 8
delete from r where a=8;
insert into r values (5);
commit;
select max(a) from r;
MAX(A): 5
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
12 / 42
Niepowtarzalny odczyt
Definicja 3
Niepowtarzalny odczyt wyst ˛epuje kiedy transakcja odczytuje dwa razy
te same dane i otrzymuje inne wyniki, gdy˙z zostały one zmienione
przez inn ˛
a, zatwierdzon ˛
a transakcj ˛e.
Transakcja T
2
nie odczytała niezatwierdzonych danych, ale otrzymała
niespójne odpowiedzi: max(a) < min(a).
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
13 / 42
Fantomowe dane
Rozwa˙zmy scenariusz:
T
1
T
2
select a from r;
A: 1, 2, 8
insert into r values (5);
commit;
select a from r;
A: 1, 2, 8, 5
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
14 / 42
Fantomowe dane
Definicja 4
Fantomowe dane pojawi ˛
a sie, kiedy transakcja odczytuj ˛
ac dwa razy te
same dane otrzymuje za drugim razem wi ˛ecej wyników.
Przy tej anomalii nie wyst ˛
apiłby problem typu: max < min.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
15 / 42
Poziomy izolacji transakcji
Wyró˙zniamy nast ˛epuj ˛
ace poziomy izolacji transakcji:
Z odczytem niezatwierdzonych danych (uncommited read).
Z odczytem zatwierdzonych danych (commited read).
Z odczytem powtarzalnym (repeatable read).
Sekwencyjny (serializable).
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
16 / 42
Poziomy izolacji transakcji
Dopuszczalno´s´c anomalii przy poziomach izolacji:
Poziomy izolacji
„brudne
niepowtarzalno ´s ´c
dane
dane”
fantomowe
uncommited read
tak
tak
tak
commited read
nie
tak
tak
repeatable read
nie
nie
tak
serializable
nie
nie
nie
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
17 / 42
Outline
1
2
Szeregowalno´s´c
Blokady
Zakleszczenia
Misc
3
Transakcje i blokady w BD Oracle
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
18 / 42
Outline
1
2
3
Transakcje i blokady w BD Oracle
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
19 / 42
Szeregowalno´s´c
Niech t, s, w bed ˛
a zmiennymi transakcji a X , Y , Z , W rekordami w
bazie danych.
Transakcje T
i
mo˙zemy potraktowa´c jako ci ˛
ag instrukcji read(i,X,s),
write(i, X,s).
Ci ˛
ag instrukcji r
1
, . . . ,
r
n
jest
szeregowy
je´sli wszystkie instrukcje
ka˙zdej transakcji wyst ˛epuj ˛
a w jednym podci ˛
agu.
Ci ˛
ag instrukcji r
1
, . . . ,
r
n
jest
szeregowalny
je´sli je´sli istnieje
szeregowy ci ˛
ag instrukcji r
0
1
, . . . ,
r
0
n
, którego wykonanie dla
wszystkich stanów bazy danych daje ten sam efekt.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
20 / 42
Szeregowalno´s´c
Je´sli ci ˛
ag instrukcji jest szeregowalny, to mo˙zemy traktowa´c transakcje
jakby były wykonywane sekwencyjnie.
Osi ˛
agamy najwy˙zszy mo˙zliwy poziom izolacji.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
21 / 42
Szeregowalno´s´c – przykład
Ci ˛
ag instrukcji:
read(1, X,t), write(1, X, t+10);
read(2, X, s),
write(2, X, s*3);
read(1, Y, t); write(1,Y, t+10);
read(2, Y, s);
write(2, Y, s*3);
nie jest szeregowy ale jest szeregowalny.
Równowa˙zny ci ˛
ag to:
read(1, X,t), write(1, X, t+10); read(1, Y, t);
write(1,Y, t+10);
read(2, X, s), write(2, X, s*3); read(2, Y, s);
write(2, Y, s*3);
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
22 / 42
Szeregowalno´s´c – przykład
Ci ˛
ag instrukcji:
read(1, X,t), write(1, X, t+10);
read(2, X, s),
write(2, X, s*3); read(2, Y, s); write(2, Y, s*3);
read(1, Y, t);
write(1,Y, t+10);
nie jest szeregowalny.
Ci ˛
ag instrukcji:
read(1, X,t), write(1, X, t+10);
read(2, X, s),
write(2, X, s + 30); read(2, Y, s); write(2, Y, s + 30);
read(1, Y, t);
write(1,Y, t+10);
jest szeregowalny tylko z powodu przmienno´sci
dodawania.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
23 / 42
Outline
1
2
3
Transakcje i blokady w BD Oracle
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
24 / 42
Blokady
W praktyce szeregowalno´s´c jest zbyt silnym wymogiem.
Szeregowanie transakcji mogłoby spowodowa´c zbyt długi czas
działania poszczególnych transakcji.
Bardziej realistycznym rozwi ˛
azaniem s ˛
a słabsze poziomy izolacji.
W celu ich zapewnienia mo˙zna stosowa´c mechanizmy takie jak
blokady wierszy lub (rzadziej) całych tabel.
Uwaga. W praktyce Oracle sam zarz ˛
adza blokadami jakie nakładaj ˛
a
działania transakcji.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
25 / 42
Blokady dzielone
Blokada
dzielona
na rekord X pozwala innym transakcjom
odczytywa´c warto´s´c rekordu X.
Blokady dzielone stosuje si ˛e w celu zabezpieczenia odczytanego
rekordu przed zmian ˛
a w czasie działania transakcji, która go
odczytała.
Jeden rekord mo˙ze mie´c zało˙zonych wiele blokad dzielonych.
Transakcja odczytuj ˛
ac rekord X nakłada na niego blokad ˛e
dzielon ˛
a.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
26 / 42
Blokady na wył ˛
aczno´s´c
Je´sli transakcja chce zmieni´c lub usun ˛
a´c rekord X musi nało˙zy´c
na niego blokad ˛e
na wył ˛
aczno´s´c
.
Blokady na wył ˛
aczno´s´c nie mo˙zna zało˙zy´c na rekord, który ma
blokad ˛e dzielon ˛
a.
Jeden rekord mo˙ze mie´c zało˙zon ˛
a tylko jedn ˛
a blokad ˛e na
wył ˛
aczno´s´c.
Blokad ˛e tak ˛
a zakładamy modyfikuj ˛
ac rekord. Przestaje by´c on
widoczny (przy poziomie commited read) a˙z do chwili
zatwierdzenie transakcji.
Zatwierdzenie transakcji zwalnia wszystkie nałozone przez ni ˛
a
blokady.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
27 / 42
Zawieszenie wykonywania transakcji
Nało˙zona blokada mo˙ze spowodowa´c zawieszenie wykonywania
transakcji do czasu zatwierdzenia transakcji, która nało˙zyła
blokad ˛e.
Dlatego trzeba unika´c zakładania blokad (zwłaszcza na
wył ˛
aczno´s´c) w sytuacji interakcji z u˙zytkownikiem.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
28 / 42
Outline
1
2
3
Transakcje i blokady w BD Oracle
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
29 / 42
Zakleszczenia
Rozwa˙zmy ci ˛
ag interakcji:
T
1
T
2
write(X,1)
write(Y, 2)
write(Y,1)
write(X,2)
Obie transakcje czekaj ˛
a na zwolnienie blokady na wył ˛
aczno´s´c.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
30 / 42
Zakleszczenia – Oracle
W przypadku wykrycia zakleszczenia SZBD Oracle wysyła do
jednej z transakcji komunikat o bł ˛edzie: „ORA–00060: deadlock
detected while waiting for resource”.
Transkacja, która otrzymała komunikat o błedzie ko ´nczy
oczekiwanie i mo˙ze np. wykona´c commit lub rollback.
Druga z transakcji oczekuje dalej na zwolnienie blokady.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
31 / 42
Outline
1
2
Szeregowalno´s´c
Blokady
Zakleszczenia
3
Transakcje i blokady w BD Oracle
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
32 / 42
Długie transakcje
Je´sli czas modyfikacji trwa długo (np. modyfikacje programu lub
pliku tekstowego przez u˙zytkownika) to cz ˛esto nie warto zakłada´c
blokady.
Mo˙zna zastosowa´c np. system wypo˙zyczania i zwracania.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
33 / 42
Inne rodzaje blokad
Blokady inkrementacyjne.
Blokady z aktualizacj ˛
a.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
34 / 42
Outline
1
2
Szeregowalno´s´c
Blokady
Zakleszczenia
Misc
3
Transakcje i blokady w BD Oracle
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
35 / 42
O. traktuje ka˙zd ˛
a instrukcj ˛e SQL jako atomow ˛
a (statement level
atomicity).
Nie mo˙zna aktualizowa´c tylko cz ˛e´sci tabeli.
Wycofanie instrukcji SQL skutkuje tak˙ze wycofaniem skutków
działania wyzwalaczy, które uruchomiła.
Wycofanie instrukcji SQL nie powoduje wycofania całej transakcji.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
36 / 42
Ka˙zda sesja z baz ˛
a danych to jedna transakcja, zako ´nczy´c tak ˛
a
transakcj ˛e mo˙zna przez polecienie commit lub rollback.
Innym sposobem na zako ´nczenie transakcji (jako commit) jest
wydanie polecenia DDL lub zako ´nczenie poł ˛
aczenia z baz ˛
a
danych (disconnect).
Ka˙zda nowa komenda SQL po commit lub instrukcji DDL
rozpoczyna now ˛
a transakcj ˛e.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
37 / 42
Polecenia specyficzne dla Oracle
SET TRANSACTION i SET TRANSACTION NAME <nazwa>,
COMMIT, ROLLBACK,
SAVEPOINT <nazwa>,
ROLLBACK TO SAVEPOINT.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
38 / 42
Rollback to savepoint
Polecenie
rollback to savepoint <nazwa> wycofuje zmiany
wykonane przez transakcj ˛e po zało˙zeniu punktu <nazwa>.
Wszystkie blokady zało˙zone po tym punkcie zostaj ˛
a zwolnione.
Je´sli inna transakcja czekała na zwolnienie blokady ju˙z wcze´sniej,
to nie otrzyma zasobu.
Nowe blokady b ˛ed ˛
a mogły zało˙zy´c tyko transakcje, które za˙z ˛
adaj ˛
a
go po jego zwolnieniu.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
39 / 42
Rollback to savepoint – przykład
Rozwa˙zmy nast ˛epuj ˛
aca interakcj ˛e trzech transakcji na tabeli r(a,b):
T
1
T
2
T
3
...
...
...
savepoint powrot;
update r set a= 1
where b=5;
1 row updated.
update r set a= 2
where b=5;
rollback to s. powrot;
T
2
czeka ...
T
2
czeka ...
update r set a= 3
where b=5;
...
1 row updated.
commit;
...
...
commit
1 row updated.
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
40 / 42
Poziomy izolacji w Oracle
Domy´slnym poziomem izolacji jest
read commited.
Inne poziomy to
serializable oraz read only.
Poziom
read only zapewnia powtarzalno´s´c wyników zapyta ´n,
zabrania modyfikacji bazy danych (set transaction read only).
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
41 / 42
Poziomy izolacji w Oracle
set isolation level [committed read | serializable];
set transaction [read only | read write];
Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)
42 / 42