Transakcje (c.d.) i Administracja

advertisement
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
Download