background image

Transakcje

Wykład 11
Prowadzący: dr Paweł Drozda

background image

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

background image

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

background image

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)

background image

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)

background image

dr Paweł Drozda

Metoda znaczników czasowych – 
przykład (1)

t

1

   

t

2    

 

t

3    

 

t

4

   

t

5    

t

6    

t

7

   

t

8   

t

9   

t

10  

 

t

11

 

 

T

1

T

2

T

3

start

r(x)

x=x+10

w(x)

start

r(y)

y=y+20

w(y) 

start

start

r(y)

y=y+30

w(y)

background image

dr Paweł Drozda

Metoda znaczników czasowych – 
przykład (2)

t

12

 

  

t

12  

   

t

14  

   

t

15

 

  

t

16  

  

t

17  

  

t

18

t

19

 

    

T

1

T

2

T

3

z=50

w(z) 
commit

r(y)

y=y+20

w(y)

commit

z=100

w(z)

commit

background image

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:
H

1

= w

1

(x)r

2

(x)w

2

(x)c

2

a

1, 

gdzie 

TS(T

1

)< TS(T

2

)

background image

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

background image

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

background image

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)

background image

dr Paweł Drozda

Algorytmy optymistyczne (3)

efektywne – gdy konflikty rzadkie

gdy wycofania częste – algorytm 
nieefektywny

szerszy wielodostęp w porównaniu do 
blokowania

background image

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

background image

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

background image

dr Paweł Drozda

Hierarchia jednostek blokowania

Plik

1

Baza

danych

Plik

2

Plik

3

Strona

3

Strona

2

Strona

1

Rekord

2

Rekord

1

Pole

2

Pole

1

Poziom 0

Poziom 1

Poziom 2

Poziom 3

Poziom 4

background image

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

background image

dr Paweł Drozda

Blokowanie jednostek hierarchicznych

blokada intencjonalna – blokada 
zakładana na każdy węzeł nadrzędny

 np. przy blokowaniu Strona

1

 blokada 

intencjonalna założona na Plik

2

, baza danych

typy blokad intencjonalnych

intencjonalna do odczytu IR
intencjonalna do zapisu IW
wszystkie elementy do odczytu i intencjonalna 

do zapisu RIW

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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)

background image

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

background image

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)

background image

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;

background image

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

background image

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

background image

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
;

background image

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;

background image

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

background image

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


Document Outline