Bazy danych 2
Wykład 6
Transakcje
Transakcje
Def. Transakcjami nazywamy logiczne jednostki pracy które
wprowadzaj
ą
zmiany do bazy danych lub które wyszukuj
ą
dane
O transakcjach mówimy w kontek
ś
cie:
aktualizacji bazy danych
wspó
ł
u
ż
ytkowania danych przez wielu u
ż
ytkowników i powstawania
wzajemnych konfliktów
Transakcja mo
ż
e obejmowa
ć
jedn
ą
instrukcj
ę
lub wi
ę
ksz
ą
ilo
ść
instrukcji.
Właściwości transakcji
Niepodzielno
ść
ść
ść
ść
– albo wszystkie instrukcje wchodz
ą
ce w sk
ł
ad transakcji s
ą
wykonane albo
ż
adna
Spójno
ść
ść
ść
ść
– wszystkie transakcje musz
ą
zachowa
ć
spójno
ść
i integralno
ść
bazy
danych
Izolacja – je
ś
li transakcja modyfikuje dane, to te dane mog
ą
by
ć
czasowo
niespójne, dlatego musz
ą
by
ć
niedost
ę
pne dla innych transakcji dopóty, dopóki
transakcja nie sko
ń
czy ich u
ż
ywa
ć
Trwa
łłłł
o
ść
ść
ść
ść
– gdy transakcja si
ę
ko
ń
czy, to wszystkie zmiany przez ni
ą
dokonane
musz
ą
zosta
ć
w pe
ł
ni utrwalone
Transakcja – sekwencja logiczna
Logiczna sekwencja jest nast
ę
ę
ę
ę
puj
ą
ą
ą
ą
ca
[BEGIN [WORK]/
START TRANSACTION
[nazwa_transakcji]
Wykonaj polecenie 1
SAVEPOINT nazwa
Wykonaj polecenie 2
Wykonaj polecenie 3
ROLLBACK TO SAVEPOINT nazwa
Wykonaj polecenie 4
COMMIT [WORK] [TRANSACTION]
(zmiany zostaj
ą
zapisane w bazie)
[BEGIN [WORK]/
START TRANSACTION
[nazwa_transakcji]
Wykonaj polecenie 1
ROLLBACK [WORK] [TRANSACTION]
(baza danych powraca do stanu
pierwotnego)
Transakcja z punktami zapisu
Przykład
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
SAVEPOINT my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Bob';
ROLLBACK TO my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Wally';
COMMIT TRANSACTION;
UWAGI
Standard SQL nie definiuje frazy BEGIN. Transakcje w tym standardzie
rozpoczynaj
ą
si
ę
bowiem automatycznie wraz z wykonaniem pierwszej
instrukcji.
W programistycznym SQL zako
ń
czenie programu ko
ń
czy z
powodzeniem tak
ż
e ostatni
ą
transakcj
ę
, nawet je
ż
eli nie zosta
ł
o
wydane polecenie COMMIT, za
ś
zako
ń
czenie z b
łę
dem powoduje
wycofanie aktualnej transakcji.
Problem utraty zmian
Przyczyna zaburzeń: Transakcja T
1
czyta dane podczas, gdy są one
modyfikowane przez transakcję T
2
Problem niezatwierdzonych
zależ
ż
ż
żnoś
ś
ś
ści (brudny odczyt)
Przyczyna zaburzeń: Transakcja T
3
jest wykonywana przy założeniu,
że modyfikacja wykonana przez przez transakcję T
4
została
zakończona z powodzeniem
Problem analizy niespójnoś
ś
ś
ści
Przyczyna zaburzeń: Transakcja T
6
czyta dane, które są modyfikowane
przez transakcję T
5
Kontrola współłłłbież
ż
ż
żnoś
ś
ś
ści
Uwaga: DBMS powinien zapewniać pewien „mechanizm” umożliwiający
zarządzanie operacjami wykonywanymi jednocześnie na bazie danych bez
dopuszczania do niepożądanych oddziaływań pomiędzy nimi.
Jednym z nasuwających się rozwiązań jest zezwolenie na wykonywanie
tylko jednej transakcji w danym czasie; takie postępowanie jednak w
znacznym stopniu wpływa na wydajność bazy danych.
Rozwiązaniem lepszym (w kontekście wydajności) jest jakaś forma
„przeplatania” transakcji, wiąże się z tym pojęcie
szeregowalności
[Papadimitriou, 1979]
Pojęcie szeregowalności
Def.
Harmonogram
jest to ciąg operacji wykonywanych jednocześnie
transakcji, w których zachowany jest porządek operacji każdej transakcji.
Def.
Harmonogram sekwencyjny
to harmonogram, w którym operacje
każdej transakcji są wykonywane kolejno, bez przeplatania operacji z
różnych transakcji.
W przypadku harmonogramu sekwencyjnego transakcje nie
oddziaływają na siebie, ponieważ w danym czasie jest wykonywana
tylko jedna transakcja.
Kolejność transakcji nie jest ustalona, zatem wynik każdego
sekwencyjnego wykonania transakcji nie musi być taki sam.
Def.
Harmonogram
niesekwencyjny jest to harmonogram, w którym
operacje ze zbioru jednocześnie wykonywanych transakcji, są
przeplecione.
Pojęcie szeregowalności
Def. Harmonogram wykonywanych jednocześnie transakcji nazywamy
szeregowalnym
jeśli doprowadza on do takiego samego stanu bazy
danych jak pewne wykonanie sekwencyjne tych transakcji.
Fakt:
Harmonogram szeregowalny jest harmonogramem poprawnym,
czyli zapewnia takie wykonanie transakcji współbieżnie nie dopuszczając
do niepożądanych oddziaływań pomiędzy nimi.
Uzasadnienie:
Indywidualne transakcje są poprawne
Dowolny harmonogram sekwencyjny jest poprawny
Zatem harmonogram szeregowalny jest poprawny, bo doprowadza
bazę do stanu takiego jak harmonogram szeregowalny.
Pojęcie szeregowalności
Dla zapewnienia szeregowalno
ś
ci wa
ż
ne jest wzajemne uporz
ą
dkowanie
operacji odczytu i zapisu transakcji:
Je
ż
eli dwie transakcje jedynie czytaj
ą
ten sam element danych, to ich
wzajemna kolejno
ść
nie jest istotna
Je
ż
eli dwie transakcje czytaj
ą
lub zapisuj
ą
ró
ż
ne elementy danych, to
nie koliduj
ą
ze sob
ą
i ich wzajemna kolejno
ść
nie jest istotna.
Je
ż
eli jedna transakcja zapisuje element danych, a druga go
odczytuje lub zapisuje, to kolejno
ść
wykonania tych transakcji ma
znaczenie.
Pojęcie szeregowalności
Techniki kontroli wielodostępu
Metoda blokad (często stosowana przez
byłego juz posła Andrzeja.L)
Metody oparte na blokadach
•
Metoda oparta na blokadach polega na tym,
ż
e transakcja, która
odwo
ł
uje si
ę
do danych blokuje innym transakcjom dost
ę
p do danych.
•
Rozró
ż
niamy dwa typy blokad:
–
Blokada do odczytu R (read locks) – je
ż
eli transakcji zostanie
przyznana blokada read locks jednostki danych, to transakcja mo
ż
e
odczytywa
ć
warto
ść
tej jednostki, ale nie mo
ż
e jej zmienia
ć
–
Blokada do zapisu W (write locks) - je
ż
eli transakcji zostanie
przyznana blokada write locks jednostki danych, to transakcja mo
ż
e
zarówno odczytywa
ć
warto
ść
tej jednostki, jak i j
ą
zmienia
ć
–
Sposób przyznawania dzia
ł
ania blokad przedstawia macierz:
Y
N
R
N
N
W
R
W
Protokól dostępu danych
1.
Transakcja, która wymaga dost
ę
pu do jednostki danych wyst
ę
puje o
przyznanie blokady dzielonej (je
ż
eli zamierza jedynie odczyta
ć
warto
ść
jednostki) lub blokady wy
łą
cznej (je
ż
eli zamierza odczyta
ć
i
modyfikowa
ć
warto
ść
jednostki)
2.
Je
ż
eli jednostka nie zosta
ł
a wcze
ś
niej zablokowana przez inn
ą
transakcj
ę
, to blokada jest przydzielana transakcji, która o ni
ą
wyst
ę
puje.
3.
Je
ż
eli pro
ś
ba o blokad
ę
jednostki zosta
ł
a odrzucona, poniewa
ż
jest w
konflikcie z blokad
ą
ju
ż
za
ł
o
ż
on
ą
, to transakcja przechodzi w stan
oczekiwania, a
ż
blokada zostanie zwolniona.
4.
Transakcja utrzymuje blokad
ę
jednostki, a
ż
do momentu jej jawnego
odwo
ł
ania w trakcie wykonania lub do czasu zako
ń
czenia (poprzez
odrzucenie lub wype
ł
nienie).
Protokół dostępu danych - przykład
bal
x
=100 bal
y
=400
T9 ->T10
bal
x
=220 bal
y
=330
T10 ->T9
bal
x
=210 bal
y
=340
Stosujemy blokowanie
bal
x
=220 bal
y
=340 schemat nie jest szeregowalny
Protokól blokowania dwufazowego– 2PL
Schemat protoko
ł
u blokowania dwufazowego jest nast
ę
puj
ą
cy:
1.
Zanim transakcje rozpocznie przetwarzanie jednostki musi uzyska
ć
blokad
ę
tej jednostki; transakcja
żą
da za
ł
o
ż
enia wszystkich
potrzebnych blokad
2.
Po zwolnieniu blokady transakcja nie mo
ż
e ju
ż
nak
ł
ada
ć
nowych
blokad.
Twierdzenie (Eswaran i in., 1976)
•
Je
ż
eli wszystkie transakcje spe
ł
niaj
ą
protokó
ł
dwufazowego
blokowania, to wszystkie harmonogramy niesekwencyjne s
ą
szeregowalne.
2PL – zapobieganie utracie zmian
2PL
2PL
–
–
zapobieganie brudnemu odczytowi
zapobieganie brudnemu odczytowi
2PL
2PL
–
–
zapobieganie wyst
zapobieganie wyst
ą
ą
pieniu
pieniu
problemu analizy niesp
problemu analizy niesp
ó
ó
jno
jno
ś
ś
ci
ci
2PL – wydaje się wspaniale
ale ...
2PL
2PL
–
–
problem
problem
(wycofanie kaskadowe)
(wycofanie kaskadowe)
Sztywny 2PL – blokady zdejmowane w momencie zakończenia transakcji
Ś
Ś
Ś
Ścisłłłły 2PL- blokady wyłączne ( do zapisu) zdejmowane w momencie
zakończenia transakcji
2PL
2PL
–
–
problem
problem
(zakleszczenie)
(zakleszczenie)
Metoda wykluczeń
ń
ń
ń – transakcja, która wystąpiła o blokadę czeka na nią tylko określony czas
Metoda zapobiegania zakleszczeniom – system nie dopuszcza do blokady
Metoda wykrywania zakleszczeń
ń
ń
ń o odtwarzania – system wykrywa zakleszczenie i
odrzuca jedną z transakcji, a później ją wznawia
Współbieżność w SQL – poziomy izolacji
Standard SQL nie zawiera
ż
adnych jawnych mo
ż
liwo
ś
ci blokowania,
umo
ż
liwia stosowanie ró
ż
nych poziomów izolacji transakcji od innych
transakcji, poziomy izolacji definiowane s
ą
na podstawie tego, które z
narusze
ń
szeregowalno
ś
ci dopuszczaj
ą
.
Współbieżność w SQL – poziomy
izolacji
Brudny odczyt (Dirty read): pierwsza transakcja modyfikuje wiersz, a
druga go czyta, zanim zmiana zosta
ł
a zatwierdzona przez instrukcj
ę
COMMIT. Je
ś
li pierwsza transakcja zosta
ł
a anulowana, zmiana nie
mia
ł
a miejsca i druga transakcja przeczyta
ł
a wiersz, który naprawd
ę
nigdy nie istnia
ł
Niepowtarzalny odczyt (Non-repeatable read): pierwsza transakcja
czyta wiersz. Druga go usuwa lub modyfikuje i wykonuje COMMIT
przed pierwsz
ą
. Teraz pierwsza transakcja mog
ł
aby przeczyta
ć
ten
sam wiersz jeszcze raz i otrzyma
ć
inne wyniki zanim zostanie sama
zatwierdzona.
Odczyt widmo (Phantom): pierwsza transakcja odczytuje wiersze
spe
ł
niaj
ą
ce predykat. Druga wstawia warto
ś
ci (instrukcja INSERT) lub
je modyfikuje (UPDATE) tak,
ż
e one równie
ż
spe
ł
niaj
ą
predykat.
Nast
ę
pne wykonanie tego samego zapytania przez pierwsz
ą
transakcj
ę
da inne wyniki.
Wsp
Wsp
ó
ó
ł
ł
bie
bie
ż
ż
no
no
ść
ść
w SQL
w SQL
–
–
poziomy
poziomy
izolacji
izolacji
niedozwolone czytanie wierszy z blokadą write lock
blokada read lock założona na wszystkie wiersze zawierające
informacje na zadany temat (nie tylko te spełniajace warunek
selekcji)
SERIALIZABLE
niedozwolone czytanie wierszy z blokadą write lock
Blokada read lock założona na wszystkie wiersze będące
wynikiem zapytania i utrzymywana do końca transakcji
REPEATABLE
READ
niedozwolone czytanie wierszy z blokadą write lock
blokada read lock założona i utrzymywana tylko na czas
czytania wiersza
READ
COMMITED
dozwolone czytanie wierszy z założoną blokadą write lock
brak blokady read lock
READ
UNCOMMITED
Charakterystyka
Poziomy
izolacji
Współbieżność w SQL – poziomy izolacji
NIE
NIE
NIE
SERIALIZABLE
TAK
NIE
NIE
REPEATABLE READ
TAK
TAK
NIE
READ COMMITED
TAK
TAK
TAK
READ
UNCOMMITED
Odczyt
widmo
Niepowtarzalny
odczyt
Brudny
odczyt
Poziom izolacji
Definiowanie poziomu izolacji w SQL
SET TRANSACTION ISOLATION LEVEL
{READ UNCOMMITED | READ COMMITED | REPEATABLE READ |
SERIALIZABLE}
Im wyższy poziom izolacji tym większe bezpieczeństwo, ale wolniejsze
działanie BDMS
Jeżeli wszystkie transakcje są na poziomie SERIALIZABLE, to system
gwarantuje szeregowalność harmonogramów.
Jawne blokady (zależne od dialektu)
Wiersze i tabele można blokować wyłącznie wewnątrz
transakcji, po zakończeniu transakcji wszystkie blokady
zostaną zwolnione, nie ma sposobu jawnego zwolnienia
blokady
Blokowanie wierszy spełniających warunek
SELECT ….. FOR UPDATE
Blokowanie tabel
LOCK TABLE table-name
IN { SHARE | EXCLUSIVE } MODE
Dziękuję za uwagę!