Escolar Documentos
Profissional Documentos
Cultura Documentos
2 Controle de Concorrncia
O controle de concorrncia a atividade de coordenar a ao de processos que
operam em paralelo, acessam dados compartilhados e, portanto, interferem uns com os
outros.
Quando duas ou mais transaes executam concorrentemente, suas operaes podem
ser processadas, pelo sistema de computao, de forma intercalada (interleaving). A
Figura 2-1 apresenta um exemplo da execuo serial das transaes T1, T2 e T3 e da
execuo interleaving das mesmas transaes.
T1
T1
T2
T2
T3
T1
T3
T2
T1
tempo
T2
T3
....
Tn
Gerente de
Transaes
Scheduler
Gerente de Dados
Gerente de
Recuperao
Falhas
Gerente de
Buffers
Banco de Dados
/LOG
a) execuo serial
T1
read(x)
X=x-10
write(x)
read(y)
Y=y+10
write(y)
commit
b) execuo no serial
T1
T2
read(x)
x=x-10
read(x)
x=x+100
write(x)
Commit
write(x)
read(y)
y=y+n
write(y)
commit
T2
read(x)
x=x+100
write(x)
commit
TAs no recuperveis:
Uma transao no pode se basear em dados de uma transao que ainda no foi
efetivada (princpio da recuperabilidade).
T3
read(x)
x=x-10
write(x)
T4
read(x)
x=x+100
write(x)
commit
read(y)
rollback
T4 considerou T3
concluda com
sucesso o que no
verdadeiro!!!
Exemplo:
Histria Ha: r1(X); w1(X); r1(Y); w1(Y); c1; r2(X);w2(X); c2;
Histria Hb: r2(X);w2(X); c2; r1(X); w1(X); r1(Y); w1(Y); c1;
Histria Hc: r1(X); w1(X); r2(X);w2(X); r1(Y); w1(Y); c1;c2
2.2.1 Situao de conflito em uma Histria
Existe um conflito se duas operaes pertencem a transaes diferentes e fazem
acesso ao mesmo dado x e uma das operaes um write(x).
Conflitos em Hc: r1(X) e w2(X); r2(X) e w1(X); w1(X) e w2(X);
No so conflitantes em Hb:
Operaes conflitantes:
Ti(read(X)) e Tj(write(X)): Se Ti vier antes de Tj, ento Ti no l o valor escrito
por Tj.
Ti(write(X)) e Tj(read(X)): Se Ti vier antes de Tj ento Tj vai ler os valor escrito
por Ti.
Ti(write(X)) e Tj(write(X)): O prxima valor de read(X) ser afetado pela ordem
de execuo de Ti e Tj, pois s o ltimo valor vai permanecer.
a)
b)
T1
T2
T1
Read(X)
X:=X*1.1
Write(X)
Read (Y)
Y:= Y+20
Write(Y)
T2
Read(X)
X:= X+100
Write(X)
Read(X)
X:=X*1.1
Write(X)
Read (Y)
Y:= Y+20
Write(Y)
Read(X)
X:=X+100
Write(X)
Uma histria H dita serial se, para cada duas transaes Ti e Tj ou todas as
operaes de Ti aparecem antes de Tj ou vice-versa, logo:
so sempre corretas;
no h interferncia de outras transaes;
limitam a concorrncia, pois no possvel fazer o escalonamento da CPU
entre as transaes;
d)
T1
T2
Read(X)
X:=X*1.1
Write(X)
T1
T2
Read(X)
X:=X*1.1
Read(X)
Read(X)
X:= X+100
X:= X+100
Write(X)
Read (Y)
Y:= Y+20
Write(Y)
Write(X)
Write(X)
Read(Y)
Y:= Y+20
Write(Y)
T2
T2
Exemplos:
a) Scheduler Serializvel
Ti
Read(A)
Write(A)
Ti
A
R_TS
W_TS
Read(A)
Write(A)
Read(B)
Write(B)
B
Read(B)
Write(B)
R_TS
W_TS
b)Scheduler No-serializvel
Ti
Read(A)
Tj
A
Read(A)
Write(A)
Read(B)
Write(A)
Read(B)
Write(B)
R_TS
W_TS
B
R_TS
W_TS
Write(B)
Write(x): busca-se a verso xi com o maior TS que seja menor ou igual a TS(Ti). Se
TS(Ti) < read_TS(xi), ento Ti desfeita; caso contrrio, uma nova verso de x criada
e os valores de read_TS(xi) e write_T S(xi) so inicializados com TS(Ti).
Algumas transaes podero ter o seu commit postergado, por exemplo, se TS(xi) <
TS(xj), ou seja, a transao j se baseou na verso de x da transao i, ento tj s poder
concluir com sucesso (commit) aps o trmino de ti.
O esquema apresenta as seguintes vantagens:
C
X
E
X
X
Quando uma transao Ti deseja acessar um dado, ela deve primeiro bloque-lo com
um dos dois tipos de bloqueio, dependendo da operao desejada. Se o dado j est
bloqueado com tipo incompatvel, Ti precisa esperar at que todos os bloqueios
incompatveis sejam liberados.
To logo o dado deixe de ser utilizado o bloqueio deve ser liberado.
T1
lock_E(x)
read(x)
x=x-1
write(x)
unlock(x)
T2
lock_E(x)
espera
...
...
...
lock_E(x)
x=x+100
write(x)
unlock(x)
T4
sum=0
lock_C(x)
read(x)
unlock(x)
sum=sum+x
lock_C(y)
lock_E(x)
x=x-10
write(x)
unlock(x)
commit
read(y)
unlock(y)
sum-sum+y
T2
T1
Lock_E(x)
x=x-10
T2
read(x)
x=x+100
write(x)
commit
write(x)
read(y)
y=y+10
write(y)
commit
lock_E(x)
espera
...
...
...
...
...
...
...
...
...
continua ...
write(x)
lock_E(y)
read(y)
y=y+10
write(y)
commit
unlock(x,y)
2PL Estrito
2PL Bsico
BOT
EOT
BOT
2PL Conservativo
EOT
BOT
EOT
2.4 Deadlock
Uma situao que pode ocorrer em sistemas concorrentes conhecida por impasse
ou deadlock (abrao mortal). O deadlock est associado a utilizao de recursos
compartilhados que s podem ser utilizados de forma exclusiva, no caso de banco de
dados, os dados utilizados pelas transaes.
Um sistema est em deadlock sempre que uma transao Ti est esperando por um
item de dado que est bloqueado por uma transao Tj e Tj est esperando por um item
de dado que est bloqueado por Ti.
H dois mtodos para resolver um deadlock:
T1
T2
Nessas situaes mais interessante bloquear todo o arquivo, pois em uma nica
solicitao todo o arquivo estar bloqueado e o tempo necessrio para realizar os bloqueios
(de cada registro) evitado. Em contrapartida, se a transao necessita de apenas um
registro, bloquear todo o arquivo desnecessrio e, tambm, elimina a concorrncia.
importante, ento, que o sistema permita definir mltiplos nveis de granularidade
de bloqueio. A granularidade de bloqueio , ento, a poro de itens de dados que pode ser
bloqueada por uma transao. As granularidades mais usuais so:
registro (tupla);
pgina;
arquivo (tabela).
Isso pode ser implementado atravs de uma rvore de granularidade, onde cada
nodo representa a poro de dados (gro) que est sendo bloqueada e existe uma hierarquia
entre os nodos. Observe a Figura 2-4:
BD
A2
A1
Arq a
ra1
...
Arq b
ran
rb1
...
Arq c
rbn
rc1
...
rcn
quando uma transao bloqueia um determinado gro (ou nodo), ela bloqueia
tambm todos os nodos filhos deste gro no mesmo modo de bloqueio;
quando uma transao bloqueia um gro, todos os seus ancestrais devem ser
bloqueados intencionalmente no mesmo modo de bloqueio.
Modos de bloqueio:
CI
EI
CEI
CI
EI
CEI
Regras:
1) respeitar a matriz de compatibilidade dos modos de bloqueio
2) a raiz da rvore precisa ser bloqueada primeira e pode ser bloqueada em
qualquer modo
3) um nodo n pode ser bloqueado por Ti no modo C ou CI apenas se os pais de n
esto correntemente bloqueados por Ti no modo EI ou CI
4) Um nodo n pode ser bloqueado por Ti no modo E, CEI, ou EI apenas se os pais
de n esto correntemente bloqueados por Ti no modo EI ou CEI
5) Ti pode bloquear um nodo apenas se ele no desbloqueou nenhum nodo antes
(segue a tcnica de bloqueio de duas fases)
6) Uma Ti pode desbloquear um nodo apenas se nenhum dos filhos estiver
bloqueado por Ti.
O protocolo de granularidade mltipla exige que os bloqueios sejam feitos de cima
para baixo (top-down da raiz para as folhas), enquanto a liberao deve ser de baixo para
cima (bottom-up das folhas para a raiz).
Esse protocolo aumenta a concorrncia e reduz o overhead por bloqueio. Isso
particularmente til em aplicaes que misturam: