Vous êtes sur la page 1sur 13

Controle de Concorrncia

Curso Multiplus

Prof. Jorge Soares


(jorge@pobox.com
jorge@pobox.com))

Tcnicas de Controle de Concorrncia


Bloqueios (Locks)
o varivel associada a um item de dado no BD
o descreve o status daquele item com respeito a
operaes possveis que podem ser aplicadas ao
item.
o usados como meio de sincronizar o acesso de
transaes concorrentes aos itens do banco de
dados. Locked(1)

Unlocked (0)
Estados:
Operaes: Lock(x), Unlock(x)

1
Mecanismos de Locks
item lock
 Lock exclusivo: 0/1

 impede a concorrncia: lock binrio


Regras:
1- Uma transao T deve realizar uma operao de lock(x) antes de
um read(X) ou write(X)
2- Uma transao T deve realizar uma operao de unlock(x) aps
todo read(x) e write(x) terem sido completados em T
3- Uma transao T no efetuar um lock(x) se x j estiver bloqueado
4- Uma transao T no efetuar um unlock(x) a menos que X esteja
bloqueado

Mecanismos de Locks
 Lock Compartilhado: existe concorrncia
- operao de leitura compartilhada (read_lock(x))
- gravao bloqueada de forma exclusiva
(write_lock(x))

item bloqueio n0 reads (n0 transaes que compartilham o item)

read_lock(x)
write_lock(x)
unlock

2
Regras p/lock compartilhado

1- Uma transao T deve executar uma operao de read_lock(x)


ou write_lock(x) antes de qq read(x) em T
2- Uma transao T deve executar uma operao de write_lock(x)
antes de qq operao de write(x) em T
3- Uma transao T deve executar uma operao de unlock(x)
aps todos os read(x) e write(x) previstos nela
4- Uma transao T no dever executar um read_lock(x) se j
existir um read (compartilhado) ou um write(exclusivo) sobre
aquele item
5- Uma transao T no dever executar um write_lock(x) se j
existir um read (compartilhado) ou um write(exclusivo) sobre
aquele item
6- Uma transao T no dever executar um unlock(x) a menos
que j exista um read (compartilhado) ou um write(exclusivo)
sobre aquele item

Locks exclusivos/compartilhados
no garantem a serializao
Exemplo:

S T1 T2
x=20, y=30
read_lock(y) read_lock(x)
read y read x T1 T2
unlock y unlock x
write_lock(x) write_lock (y)
read (x) read (y) T2 T1
x:= x+y y:=x+y
x=50, y=80 x=70, y=50
write(x) write(y)
unlock(x) unlock(y)

3
Tornando T1 e T2 concorrentes
S1 T1 T2
read_lock(y)
read y x=20, y=30
unlock y
read_lock (x)
read x
unlock x
write_lock (y) x=50, y=50
read y
y:= x+y
write y
unlock y
S1 < > S
write_lock (x)
read x S1 serializvel?
x:= x+y
write x
unlock x Por que?

Soluo: Protocolo de Bloqueio


Bifsico Bsico
 Todas as operaes de lock (read_lock, write_lock) devem
preceder a 1a operao de unlock da transao (qq seja ela)

T1 T2
S2
read_lock(y) read _lock(x)
write_lock(x) write_lock(y)
read y read x
unlock y unlock x
read x read y
x:=x+y y:=x+y
write x write y
unlock x unlock y

4
Protocolo de Bloqueio Bifsico
Bsico (2-phase locking 2PL)
 Limita o grau de concorrncia pois:
 a transao deve bloquear um item X antes
mesmo de ser necessrio. Somente depois
que todos os itens necessrios transao
tenham sido bloqueados, X poder ser
relaxado.
 Garante serializao do esquema
 Porm, pode causar deadlock,
starvation (livelock)

Deadlock (Impasse)

 Situao onde 2 ou mais transaes


esto simultaneamente em estado de
espera, com dependncia entre elas.
Exemplo:
T1 T2

read_lock(y) X
read y T1 T2
read_lock(x) Y
read x
write_lock(x)
write_lock(y)

5
Protocolos p/ preveno de
deadlocks
1- 2PL Conservador: toda transao bloqueia previamente
todos os itens que necessitar; se algum item no puder ser
acessado, ento nenhum bloqueado. A transao espera e
tenta de novo (limita concorrncia);
2- Bloqueio de itens por ordem: ordena todos os itens no
BD de forma a assegurar que os itens utilizados sero
bloqueados naquela ordem;
3- Timestamp(TS): identificador serial nico para cada
transao. Transaes ordenadas segundo seus TS.
TS(T1) < TS(T2)

+ velha

Protocolos p/ preveno de
deadlocks: baseados em TS
Supor que uma transao Ti tente bloquear X porm no
consegue porque X j est bloqueado por outra
transao Tj
3a. Esperar-morrer (wait-die)
 se TS(Ti) < TS(Tj) (Ti mais antiga que Tj)
ento Ti espera
seno Ti aborta e recomea + tarde com o mesmo TS
3b Ferir-esperar (wound-wait)
 se TS(Ti) < TS(Tj)
ento Tj aborta e recomea + tarde
seno Ti espera
(3a e 3b podem causar sucessivos abort/restart)

6
Protocolos p/ preveno de
deadlocks: no utilizam TS
4- Espera cuidadosa:
Situao: Ti tenta acessar X mas este est bloqueado por Tj
Se Tj no estiver aguardando nenhum item bloqueado
ento Ti bloqueado e pode esperar, seno Ti aborta
5- Grafo de espera
Quando Ti estiver a espera de um bloqueio no item X que j estiver
bloqueado por Tj, traar um arco Ti Tj

Exemplo T1 T2 Deadlock !!!

6- Timeout: sistema aborta T aps um tempo pr-especificado

Starvation (Inanio)
 Uma transao no pode prosseguir por um tempo
indefinido, enquanto outras continuam aguardando

esquemas + justos de prioridade

First-come-first-serve
(transaes podem bloquear um item segundo a ordem em que
solicitaram o lock)

7
Compatibilidade entre Read/Write

T(locks X)

T Read Write
Read sim no

Write no no

Granularidade de itens

 Itens podem ser:


 campo
 registro
 tabela
 bloco
 pgina
 arquivo
 BD
 granularidade do item X nvel de
concorrncia X overhead

8
Bloqueios em granularidade
mltipla
BD

A1 A2

P11 P12 .... P1n P21 P22 .... P2m

r111 ... r11j r121 ... r12j ... r1n1... r1nj ... r21k r221 ... r22k ... r22j .... r2mk
r211

- T1 deseja atualizar registros de A1: lock exclusivo s/ A1


- T2 deseja somente acessar um registro de P1 de A1

Bloqueios em granularidade mltipla

 Requer tipos adicionais de locks:


 compartilhamento intencional (IS):
um lock requerido p/ algum n
descendente
 intencional exclusivo(IX): lock
exclusivo p/ algum n descendente
 intencional exclusivo compartilhado
(SIX): n corrente bloqueado em
modo compartilhado, mas lock
exclusivo ser requerido p/ um n
descendente

9
Matriz de compatibilidade
T
IS IX S SIX X

IS S S S S N

T IX S S N N N

S S N S N N

SIX S N N N N

X N N N N N

Protocolo utilizado
1- Bloqueios conflitantes no podem ser concedidos
2- A raiz da rvore deve ser bloqueada primeiro em qq modo
3- Um n N pode ser bloqueado por uma transao T em modo
compartilhado(S) ou IS somente se o n pai N j estiver bloqueado
por T nos modos IS ou IX
4- Um n N pode ser bloqueado por uma trans. T em modo X,IX ou
SIX somente se o n pai N j estiver bloqueado por T nos modos IX
ou SIX
5- Uma trans. T pode bloquear um n somente se no tiver
desbloqueado nenhum n (protocolo 2PL)
6- Uma transao T pode desbloquear um n N somente se nenhum
dos ns filhos de n estiver bloqueado por T

10
Granularidade mltipla

 Quando utilizar?
 Transaes curtas que acessam
poucos itens (registros ou campos)
 Transaes longas que acessam
arquivos
menos bloqueios
menos overhead
 SGBDs que oferecem granularidade
mltipla: Oracle, SQLServer, DB2
(registros, tabelas, BD...)

Controle de concorrncia baseado em TS

 No existem locks logo no h deadlocks


 Ordenao de TS: p/ cada item acessado por mais de
uma transao, a ordem de acesso ao item no viola
a ordem de serializao do esquema. Baseado em 2
valores:
 Read_TS(X): operao de leitura do TS de X: maior TS
(Transao mais nova) dentre todos os TS das
transaes que tiveram sucesso na leitura de X
 Write_TS(X): operao de gravao do TS de X: maior
TS (Transao mais nova) dentre todos os TS das
transaes que tiveram sucesso na gravao de X

11
Algoritmo de ordenao por
TimeStamp (TS)

Cada vez que alguma transao T tenta ler ou


gravar X, compara-se o TS de T com o do read
ou write, de forma a assegurar que a ordem de
execuo do TS das transaes no violado
(nesse caso T violaria o schedule serial
equivalente, fazendo com que T seja abortada e
depois re-submetida ao sistema com novo TS).

Algoritmo: verifica violao da


ordem de TS

1- T tenta efetuar operao de read(x):


se TS(T) >= write_TS(x)
ento executa read(x); TS(T) read_TS(x) se for o caso
seno aborta T

2- T tenta efetuar operao de write(x):


se TS(T) >= read_TS(x) E se TS(T) >= write_TS(X)
ento executa write_item(x); TS(T) write_TS(X) se for o caso
seno aborta T

12
Tcnica otimista p/ controle de
concorrncia
 Nenhum teste realizado durante a
transao
 Atualizaes no so feitas diretamente no
BD at que a transao termine
 Fases:
 fase de leitura: leitura de itens
committeddo BD; atualizaes locais
 fase de validao: teste de serializao
 fase de gravao: se validao ok, grava
atualizao no BD; seno descarta-as, e T
reiniciada

Protocolo otimista
 Fase de validao:
1. Tj completa sua fase de gravao antes que Ti
inicie sua fase de leitura
2. Ti comea gravao depois que Tj completa fase
de gravao, e a leitura de Ti no tem itens em
comum com a gravao de Tj
3. Ambas operaes de read/write de Ti no tm
itens em comum com o write de Tj, e Tj completa
sua leitura antes que Ti complete sua fase de
leitura
 A validao bem sucedida se uma dessas
condies ocorrer

13

Vous aimerez peut-être aussi