Vous êtes sur la page 1sur 28

C4.

Controlul concurentei
prin blocare

Sisteme de gestiune a
bazelor de date,
2014-2015

C4. SGBD
Controlul concurentei prin blocare

Blocarea resurselor
Nivele de izolare si blocari
Asigurarea serializabilitatii - 2PL
Interblocari
Prevenire
Evitare
Detectie si iesire

Controlul concurentei prin blocare

C4. SGBD

Tipuri de blocari (general):


Partajat
Exclusiv

Matricea compatibilitatilor:
Shared

Excl

Shared

Excl

Controlul concurentei prin blocare

C4. SGBD

In utilizarea blocarilor partajate si exclusive, trebuie


respectate urmatoarele reguli:
Orice unitate de acces care este blocata de o tranzactie, trebuie
ulterior deblocata de catre aceeasi tranzactie inainte de terminarea
acesteia;
O tranzactie T nu incearca sa deblocheze o unitate de acces blocata
de o tranzactie T;
O tranzactie nu incearca sa blocheze (si) pentru citire o unitate de
acces pentru care are asociata deja o blocare partajata sau exclusiva
(vezi observatia de mai jos);
O tranzactie nu incearca sa blocheze (iarasi) pentru citire-scriere o
unitate de acces pentru care are asociata deja o blocare exclusiva;

Controlul concurentei prin blocare

C4. SGBD

TM trimite o cerere de blocare pi(x) planificatorului:


Daca pLi(x) este in conflict cu vreo blocare qLj(x) (acordata sau deja
solicitata si in asteptare) atunci operatia pi(x) este amanata =>
forteaza Ti sa astepte pana cand poate impune blocarea dorita pe x
(pLi(x)).
Altfel seteaza pLi(x) si trimite operatia pi(x) catre DM.

=> operatiile conflictuale sunt executate in ordinea in care


sunt obtinute blocarile corespunzatoare conflictuale =>
ordonarea operatiilor
o unitate de acces este deblocata cel mai devreme dupa primirea
confirmarii efectuarii operatiei (de catre DM)

C4. SGBD

Nivele de izolare si blocari


Blocari / durata blocarilor / nivel de izolare:
Nivel de izolare

Read Uncommitted

Tr

Read Committed

Op

Tr

Repeatable Read

Tr (record)

Tr (record)

Serializable

Tr (table)

Tr (table)

Op pe durata efectuarii operatiei


Tr de la inceputul efectuarii operatiei pana la terminarea tranzactiei

Protocolul de blocare in 2 faze


(2PL 2 Phase Locking)

C4. SGBD

2PL = protocol de blocare care asigura serializabilitatea istoriei unui un


set de tranzactii.
2PL: Odata ce planificatorul a eliberat o blocare pentru o tranzactie Ti, nu
poate sa obtina o alta blocare pentru Ti, indiferent de unitatea de acces.

Protocolul de blocare in 2 faze


(2PL 2 Phase Locking)
Exemplu 2PL, {T1, T2} / no deadlock
T1
WL(x)
RL(y)
W(x)
WU(x)
R(y)
RU(y)
C1

T2

WL(y)
W(y)
WL(x)
W(x)
WU(y)
WU(x)
C2

C4. SGBD

Protocolul de blocare in 2 faze


(2PL 2 Phase Locking)
Exemplu non-2PL, {T1, T2} / non-SR
T1

T2

WL(x)
W(x)
WU(x)

RL(y)
R(y)
RU(y)
C1

WL(y)
W(y)
WL(x)
W(x)
WU(y)
WU(x)
C2

C4. SGBD

Protocolul de blocare in 2 faze


(2PL 2 Phase Locking)
Exemplu 2PL, DEADLOCK, {T1, T2} / SR
T1

T2

WL(x)
W(x)
WL(y)
W(y)
RL(y)
WL(x)
R(y)
WU(x)
RU(y)
C1

W(x)
WU(y)
WU(x)
C2

C4. SGBD

Protocolul de blocare in 2 faze


(2PL 2 Phase Locking)
Exemplu 2PL, DEADLOCK, {T1, T2} / SR
T1

T2

RL(x)
R(x)
RL(x)
R(x)
WL(x)
WL(x)
W(x)
--RU(x)
WU(x)
C1

W(x)
--RU(x)
WU(x)
C2

C4. SGBD

C4. SGBD

2PL

2PL conservativ => SR + no deadlock


2PL strict

=> SR + executii stricte

C4. SGBD

Deadlock

Exemplu cererea de blocare a unei resurse blocata


de o alta tranzactie, si reciproc, {T1, T2}
T1

T2

WL(x)
W(x)
WL(y)
W(y)
RL(y)
WL(x)
R(y)
WU(x)
RU(y)
C1

W(x)
WU(y)
WU(x)
C2

C4. SGBD

Deadlock

Exemplu conversie de blocare (partajata ->


exclusiva), {T1, T2}
T1

T2

RL(x)
R(x)
RL(x)
R(x)
WL(x)
WL(x)
W(x)
--RU(x)
WU(x)
C1

W(x)
--RU(x)
WU(x)
C2

Deadlock
Prevenire
Metoda cererilor anticipate (2PL conservativ)
Metoda ordonarii

Evitare
Wait-die
Wound-wait

Detectie si iesire

Timeout
Waits-for graph
Extern
=> anularea unor tranzatii victima

C4. SGBD

Deadlock / wait-die
C1

C4. SGBD

C4. SGBD

Deadlock / wait-die
C1

C4. SGBD

Deadlock / wait-die
C1

C2

C4. SGBD

Deadlock / wait-die
C1

C2

Deadlock / wound-wait
C1

C4. SGBD

Deadlock / wound-wait
C1

C4. SGBD

Deadlock / wound-wait
C1

C2

C4. SGBD

Deadlock / wound-wait
C1

C2

C4. SGBD

Wait-die / Wound-wait

C4. SGBD

Exemplul 1:

Situatie
T1
T2
--------------------R1(x)
R2(y)
W1(y)
W2(x)

Wait-die
T1
T2
--------------------R1(x)
R2(y)
W1(y) (wait)
W2(x) (A)

Exemplul 2: R1(x), R2(y), W1(z), W2(x) (Wait-die)

Wound-wait
T1
T2
--------------------R1(x)
R2(y)
W1(y) (Abort T2)

C4. SGBD

Deadlock
Exemplu WFG, {T1, T2}
T1

T2

WL(x)
W(x)
WL(y)
W(y)
RL(y)
WL(x)
R(y)
WU(x)
RU(y)
C1

W(x)
WU(y)
WU(x)
C2

C4. SGBD

Deadlock
T1

T2

T3

RL(x)
R(x)

RL(x)
R(x)

RL(x)
R(x)

T4

RL(y)
R(y)
WL(y)
...

WL(y)
...

WL(y)
...

WL(x)
...

Exemplu WFG,
{T1, T2, T3, T4}

Blocarile obtinute / solicitate pe SQL-C4. SGBD


Server
select db.name,
lock.request_status, lock.request_session_id, lock.resource_type,
lock.request_mode,
req_mode_desc = (case when lock.request_mode = 'Sch-S' then 'Sch-S (Schema
stability)'
when lock.request_mode = 'Sch-M' then 'Sch-M (Schema
modification)'
when lock.request_mode = 'S' then 'S (Shared)'
when lock.request_mode = 'U' then 'U (Update)'
when lock.request_mode = 'X' then 'X (Exclusive)'
when lock.request_mode = 'IS' then 'IS (Intent Shared)'
when lock.request_mode = 'IU' then 'IU (Intent Update)'
when lock.request_mode = 'IX' then 'IX (Intent Exclusive)'
when lock.request_mode = 'SIU' then 'SIU (Shared Intent Update)'
when lock.request_mode = 'SIX' then 'SIX (Shared Intent
Exclusive)'
when lock.request_mode = 'UIX' then 'UIX (Update Intent
Exclusive)'
when lock.request_mode = 'BU' then 'BU (Bulk Update)'
else convert(varchar(10), lock.request_mode) end)
from sys.dm_tran_locks as lock
inner join sys.databases as db
on db.database_id = lock.resource_database_id

Next C5. SGBD

Planificatoare care folosesc marci de timp


Algoritmul optimist de control al concurentei
(OCC)

Vous aimerez peut-être aussi