background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

1 / 42

background image

Outline

1

Transakcje

Problemy interakcji

2

Metody usuwania konfliktów

Szeregowalno´s´c
Blokady
Zakleszczenia
Misc

3

Transakcje i blokady w BD Oracle

Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)

Bazy danych – wykład dziewi ˛

aty Transakcje

2 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

3 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

4 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

5 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

6 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

7 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

8 / 42

background image

Outline

1

Transakcje

Problemy interakcji

2

Metody usuwania konfliktów

Szeregowalno´s´c
Blokady
Zakleszczenia
Misc

3

Transakcje i blokady w BD Oracle

Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)

Bazy danych – wykład dziewi ˛

aty Transakcje

9 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

10 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

11 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

12 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

13 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

14 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

15 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

16 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

17 / 42

background image

Outline

1

Transakcje

Problemy interakcji

2

Metody usuwania konfliktów

Szeregowalno´s´c
Blokady
Zakleszczenia
Misc

3

Transakcje i blokady w BD Oracle

Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)

Bazy danych – wykład dziewi ˛

aty Transakcje

18 / 42

background image

Outline

1

Transakcje

Problemy interakcji

2

Metody usuwania konfliktów

Szeregowalno´s´c

Blokady
Zakleszczenia
Misc

3

Transakcje i blokady w BD Oracle

Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)

Bazy danych – wykład dziewi ˛

aty Transakcje

19 / 42

background image

Szeregowalno´s´c

Niech tsw bed ˛

a zmiennymi transakcji a X 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)

Bazy danych – wykład dziewi ˛

aty Transakcje

20 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

21 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

22 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

23 / 42

background image

Outline

1

Transakcje

Problemy interakcji

2

Metody usuwania konfliktów

Szeregowalno´s´c

Blokady

Zakleszczenia
Misc

3

Transakcje i blokady w BD Oracle

Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)

Bazy danych – wykład dziewi ˛

aty Transakcje

24 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

25 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

26 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

27 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

28 / 42

background image

Outline

1

Transakcje

Problemy interakcji

2

Metody usuwania konfliktów

Szeregowalno´s´c
Blokady

Zakleszczenia

Misc

3

Transakcje i blokady w BD Oracle

Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)

Bazy danych – wykład dziewi ˛

aty Transakcje

29 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

30 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

31 / 42

background image

Outline

1

Transakcje

Problemy interakcji

2

Metody usuwania konfliktów

Szeregowalno´s´c
Blokady
Zakleszczenia

Misc

3

Transakcje i blokady w BD Oracle

Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)

Bazy danych – wykład dziewi ˛

aty Transakcje

32 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

33 / 42

background image

Inne rodzaje blokad

Blokady inkrementacyjne.

Blokady z aktualizacj ˛

a.

Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)

Bazy danych – wykład dziewi ˛

aty Transakcje

34 / 42

background image

Outline

1

Transakcje

Problemy interakcji

2

Metody usuwania konfliktów

Szeregowalno´s´c
Blokady
Zakleszczenia
Misc

3

Transakcje i blokady w BD Oracle

Konrad Zdanowski ( Uniwersytet Kardynała Stefana Wyszy ´nskiego, Warszawa)

Bazy danych – wykład dziewi ˛

aty Transakcje

35 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

36 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

37 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

38 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

39 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

40 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

41 / 42

background image

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)

Bazy danych – wykład dziewi ˛

aty Transakcje

42 / 42


Document Outline