Sunteți pe pagina 1din 38

Banco de Dados II

Controle de concorrncia

Banco de Dados II

Controle de concorrncia
Protocolos baseados em bloqueio Protocolos baseados em timestamp Granularidade mltipla Esquemas multiverso Tratamento de deadlock

Banco de Dados II

Protocolos baseados em bloqueio


Um bloqueio um mecanismo para controlar o acesso

concorrente a um item de dados


Bloqueio Binrio:
Pode ter dois estados ou valores: locked (bloqueado) ou

unlocked (desbloqueado) No mximo uma transao pode manter o bloqueio de um determinado item Duas transaes no podem acessar o mesmo item de maneira concomitante
Bloqueio Mltiplo: podem ser bloqueados em dois modos:
1. Modo exclusivo (X). O item de dados pode ser lido e tambm

escrito. O bloqueio X solicitado pela instruo lock-X.


2. Modo compartilhado (S). O item de dados s pode ser lido. O

bloqueio S solicitado pela instruo lock-S.


As solicitaes de bloqueio so feitas ao gerenciador de controle

de concorrncia. A transao s pode prosseguir aps a concesso da solicitao.

Banco de Dados II

Protocolos baseados em bloqueio (cont.)


Uma transao pode receber um bloqueio sobre um item se o bloqueio

solicitado for compatvel com os bloqueios j mantidos sobre o item por outras transaes
Matriz de compatibilidade de bloqueio

Qualquer quantidade de transaes pode manter bloqueios

compartilhados sobre um item, mas se qualquer transao mantiver um bloqueio exclusivo sobre um item, nenhuma outra pode manter qualquer bloqueio sobre o item.
Se um bloqueio no puder ser concedido, a transao solicitante deve

esperar at que todos os bloqueios incompatveis mantidos por outras transaes tenham sido liberados. O bloqueio ento concedido.

Banco de Dados II

Protocolos baseados em bloqueio (cont.)


Exemplo de uma transao realizando bloqueio:

T1
lock-X (B) read(B) B := B 50 write (B) unlock(B) lock-X(A) read(A) A := A + 50 write (A) unlock(A)

T2
lock-S(A) read(A) unlock(A) lock-S(B) read(B) unlock(B) display(A + B)

O bloqueio acima no suficiente para garantir a seriao - se A e B

fossem atualizados entre a leitura de A e B, a soma exibida estaria errada.


Um protocolo de bloqueio um conjunto de regras seguidas por todas

as transaes enquanto solicita e libera bloqueios. Os protocolos de bloqueio restringem o conjunto de escalonamentos possveis.

Banco de Dados II

Protocolos baseados em bloqueio (cont.)


Transaes T1 e T2 executadas concorrentemente
T1
lock-X (B) grant-X(B,T1) read(B) B := B 50 write (B) unlock(B) lock-S(A) grant-S(A,T2) read(A) unlock(A) lock-S(B) grant-S(B,T2) read(B) unlock(B) display(A + B) lock-X(A) grant-X(A,T2) read(A) A := A + 50 write (A) unlock(A)

T2

Gerenciador de Controle de concorrncia

Banco de Dados II

Armadilhas dos protocolos baseados em bloqueio


Considere o escalonamento parcial

Nem T3 nem T4 podem ter progresso - a execuo de lock-S(B) faz com

que T4 espere que T3 libere seu bloqueio sobre B, enquanto a execuo de lock-X(A) faz com que T3 espere que T4 libere seu bloqueio sobre A.

Essa situao chamada de deadlock Para controlar o deadlock, um dentre T3 ou T4 precisa ser revertido

(rollback) e seus bloqueios liberados.

Banco de Dados II

Armadilhas dos protocolos baseados em bloqueio (cont.)


A maioria dos protocolos de bloqueio tm potencial para

gerar deadlocks. Deadlocks so um mal necessrio.


Inanio tambm possvel se o gerenciador de controle

de concorrncia for mal projetado. Por exemplo:


Uma transao pode estar esperando por um X-lock em

um item, enquanto uma seqncia de outras transaes solicitam e recebem um S-lock no mesmo item.
A mesma transao sofre repetidos rollbacks devido a

deadlocks.
O gerenciador de controle de concorrncia pode ser

projetado para prevenir a inanio (starvation).

Banco de Dados II

O protocolo de bloqueio em duas fases


Esse um protocolo que garante escalonamentos seriveis

por conflito.
Requer que cada transao emita solicitaes de bloqueio

e desbloqueio em duas fases:


Fase 1: Fase de expanso / crescimento

transao pode obter bloqueios transao no pode liberar bloqueios


Fase 2: Fase de Encolhimento

transao pode liberar bloqueios

transao no pode obter bloqueios


O protocolo garante serializao. Pode-se provar que as

transaes podem ser serializveis na ordem dos seus pontos de bloqueio (lock points) (ou seja, o ponto onde a transao adquire o seu ltimo bloqueio).

Banco de Dados II

O protocolo de bloqueio em duas fases (cont.)


Exemplo de bloqueio em duas fases

Banco de Dados II

O protocolo de bloqueio em duas fases (cont.)


O bloqueio em duas fases no garante ausncia de deadlocks.

Banco de Dados II

O protocolo de bloqueio em duas fases (cont.)


Bloqueio em duas fases no evita rollback em cascata

Banco de Dados II

Variantes do bloqueio em duas fases (cont.)


Rollback em cascata possvel sob o bloqueio em duas fases. Para

evitar isso, usa-se um protocolo modificado chamado bloqueio em duas fases severo (strict two-phase locking). Aqui, uma transao deve manter todos os seus bloqueios exclusivos at que ela execute o commit ou o abort.
O bloqueio em duas fase rigoroso ainda mais restrito: todos os

bloqueios so mantidos at que a transao execute commit ou abort. Nesse protocolo, as transaes podem ser serializadas na ordem em que elas executam commit.

Banco de Dados II

Converses de bloqueio
Bloqueio em duas fases com converses de bloqueio:

Primeira fase:
pode adquirir um bloqueio-S sobre o item pode adquirir um bloqueio-X sobre o item pode converter um bloqueio-S para um bloqueio-X (upgrade)

Segunda fase:
pode liberar um bloqueio-S pode liberar um bloqueio-X pode converter um bloqueio-X para um bloqueio-S (downgrade)

Esse protocolo garante a seriao. Mas ainda conta com o

programador para inserir as diversas instrues de bloqueio.

Banco de Dados II

Aquisio automtica de bloqueios


Uma transao Ti emite a instruo de leitura/escrita padro, sem

chamadas de bloqueio explcitas.

A operao read(D) processada como:

if Ti tem um bloqueio sobre D then read(D) else

begin
se necessrio, espera at que nenhuma outra transao tenha um bloqueio-X sobre D concede a Ti um bloqueio-S sobre D; read(D) end

Banco de Dados II

Aquisio automtica de bloqueios (cont.)


write(D) processado como:

if Ti tem um bloqueio-X sobre D then write(D) else

begin
se for preciso, espera at que nenhuma outra transao tenha um bloqueio sobre D, if Ti tem um bloqueio-S sobre D then

upgrade do bloqueio sobre D para bloqueio-X


else concede a Ti um bloqueio-X sobre D write(D) end;
Todos os bloqueios so liberados aps o commit ou abort

Banco de Dados II

Implementao do bloqueio

Um Gerenciador de Bloqueios pode ser implementado como um processo separado, ao qual as transaes enviam pedidos de bloqueios e desbloqueios. O gerenciador de bloqueios responde a um pedido de bloqueio enviando uma mensagem de concesso de bloqueio (ou uma mensagem pedindo transao para executar rollback, em caso de um deadlock). A transao solicitante espera at que o seu pedido seja respondido. O gerenciador de bloqueios mantm uma estrutura de dados chamada tabela de bloqueios para registrar os bloqueios concedidos e os pedidos pendentes. A tabela de bloqueios normalmente implementada como uma tabela hash em memria, indexada pelo nome do item de dados que est sendo bloqueado.

Banco de Dados II

Tabela de bloqueio

Retngulos pretos indicam bloqueios concedidos, brancos indicam solicitaes aguardando

A tabela de bloqueio tambm registra o tipo de bloqueio concedido ou solicitado


A nova solicitao acrescentada ao final da fila de solicitaes para o item de dados, e concedida se for compatvel com todos os bloqueios anteriores

As solicitaes de desbloqueio resultam na solicitao sendo excluda e solicitaes posteriores so verificadas para saber se agora podem ser concedidas
Se a transao abortar, todas as solicitaes aguardando ou concedidas da transao so excludas
o gerenciador de bloqueio pode manter

uma lista de bloqueios mantidos por cada transao, para implementar isso de forma eficiente

Banco de Dados II

Protocolos baseados em grafos


Os protocolos baseados em grafos so uma alternativa ao

bloqueio em duas fases

Imponha uma ordenao parcial sobre o conjunto D = {d1, d2

,..., dh} de todos os itens de dados.


acessar di antes de acessar dj.

Se di dj ento qualquer transao acessando di e dj precisa Implica que o novo conjunto D agora pode ser visto como um

grafo acclico direcionado, chamado grafo de banco de dados.


O protocolo de rvore um tipo simples de protocolo de grafo.
Somente bloqueios exclusivos so permitidos.

Banco de Dados II

Protocolo de rvore

A nica instruo de bloqueio permitida lock-x. Cada transao Ti pode bloquear um item de dados no mximo uma vez, e precisa observar as seguintes regras:
O primeiro bloqueio por Ti pode ser sobre qualquer

item de dados.

Subseqentemente, um item de dado Q pode ser

bloqueado por Ti somente se o pai de Q for


Os itens de dados podem ser desbloqueados a

qualquer momento.
Um item de dados que foi bloqueado e desbloqueado por Ti

no pode mais tarde ser bloqueado novamente por Ti

Apresenta a vantagem de realizar o desbloqueio mais cedo do que feito no protocolo em duas fases (reduz o tempo de espera e aumenta a concorrncia) Todos os escalonamentos que so legais sob o protocolo de rvore so serias de conflito

Banco de Dados II

Schedule serivel sob o protocolo de rvore

Banco de Dados II

Granularidades mltiplas
Permitem que os itens de dados sejam de vrios tamanhos e definem uma

hierarquia de granularidades de dados, onde as granularidades pequenas so aninhadas dentro das maiores. Agrupar vrios itens de dados e tratlos como uma unidade de sincronismo individual
Podem ser representadas graficamente como uma rvore (mas no

confundir com o protocolo de bloqueio em rvore)


Quando uma transao bloqueia um n na rvore explicitamente, ela

implicitamente bloqueia os descendentes do n no mesmo modo.


Ao invs de bloquear um item de dados, podemos bloquear tuplas,

tabelas, blocos de disco ou DBs


Granularidade do bloqueio (nvel na rvore onde o bloqueio feito):
granularidade menor (mais baixo na rvore): alta concorrncia, alta sobrecarga de

bloqueio
granularidade maior (mais alto na rvore): baixa sobrecarga de bloqueio, baixa

concorrncia

Banco de Dados II

Exemplo de hierarquia de granularidade

O nvel mais alto na hierarquia de exemplo o banco de dados inteiro. Os nveis abaixo so do tipo rea, arquivo e registro, nessa ordem.

Banco de Dados II

Modos de bloqueio de inteno


Alm dos modos de bloqueio S e X, existem trs modos de

bloqueio adicionais com granularidade mltipla:


Inteno de compartilhamento (IS): indica o bloqueio explcito

em um nvel inferior da rvore, mas apenas com bloqueios compartilhados.


Inteno de exclusividade (IX): indica o bloqueio explcito em

um nvel mais baixo com bloqueios exclusivos ou compartilhados


Compartilhamento com Inteno de exclusividade (SIX): a

sub-rvore com raiz nesse n bloqueada explicitamente no modo compartilhado e o bloqueio explcito est sendo feito em um nvel inferior com bloqueios no modo exclusivo.
os bloqueios de inteno permitem que um n de nvel

mais alto seja bloqueado no modo S ou X sem ter que verificar todos os ns descendentes.

Banco de Dados II

Matriz de compatibilidade com modos de bloqueio de inteno


A matriz de compatibilidade para todos os modos de bloqueio :

IS IS IX S S IX

IX

S IX

Banco de Dados II

Protocolos baseados em Timestamp


Cada transao tem uma timestamp emitido quando entra no sistema. Se

uma transao antiga Ti tem timestamp TS(Ti), uma nova transao Tj recebe a timestamp TS(Tj) de modo que TS(Ti) < TS(Tj).
O protocolo gerencia a execuo concorrente tal que os timestamp

determinam a ordem de seriao.


Existem dois mecanismos simples:
Clock do Sistema Contador Lgico

Para garantir esse comportamento, o protocolo mantm para cada dado Q

dois valores timestamp:


W-timestamp(Q) o maior timestamp de qualquer transao que

executou write(Q) com sucesso.


R-timestamp(Q) a maior timestamp de qualquer transao que

executou read(Q) com sucesso.

Banco de Dados II

Protocolos baseados em Timestamp

O protocolo de ordenao por timestamp garante que quaisquer operaes read e write em conflito sejam executadas por ordem de timestamp. Suponha que uma transao Ti emita um read(Q) 1. Se TS(Ti) W-timestamp(Q), ento Ti precisa ler um valor de Q que j foi modificado. Logo, a operao read rejeitada, e Ti revertida. 2. Se TS(Ti) W-timestamp(Q), ento a operao read executada, e R-timestamp(Q) definido como o mximo de Rtimestamp(Q) e TS(Ti).

Banco de Dados II

Protocolos baseados em Timestamp


Suponha que a transao Ti emita write(Q).
Se TS(Ti) < R-timestamp(Q), ento o valor de Q que Ti est

produzindo foi necessrio anteriormente, e o sistema considerou que esse valor nunca seria produzido. Logo, a operao write rejeitada, e Ti revertido. valor obsoleto de Q. Logo, essa operao write rejeitada, e Ti revertida. definida como TS(Ti).

Se TS(Ti) < W-timestamp(Q), ento Ti est tentando escrever um

Caso contrrio, a operao write executada, e W-timestamp(Q)

Banco de Dados II

Exemplo de uso do protocolo


Um escalonamento parcial para vrios itens de dados para transaes com timestamp 1, 2, 3, 4, 5

T1

T2 read(Y)

T3

T4

T5 read(X)

read(Y)

write(Y) write(Z) read(X) abort write(Z) abort read(Z)

read(X)

write(Y) write(Z)

Banco de Dados II

Exatido do protocolo de ordenao por timestamp


O protocolo de ordenao por timestampo garante a seriao, pois todos

os arcos no grfo de precedncia so da forma:

Transao com menor estampa de tempo

Transao com maior estampa de tempo

Assim, no haver ciclos no grfico de precedncia


O protocolo de timestamp garante liberdade de impasse, pois nenhuma

transao precisa esperar.


Mas o escalonamento pode no ser livre de cascata, e pode nem sequer

ser recupervel.

Banco de Dados II

Facilidade de recuperao e liberdade de cascata


Problema com protocolo de ordenao por timestamp: Suponha que Ti aborte, mas Tj tenha lido um item de dados escrito por

Ti

Ento, Tj precisa abortar; se Tj tivesse permitido o commit anterior, o

escalonamento no seria recupervel. escrito por Tj precisa abortar

Alm do mais, qualquer transao que tenha lido um item de dados Isso pode levar ao rollback em cascata - ou seja, uma cadeia de

rollbacks

Soluo:
Uma transao estruturada de modo que suas escritas sejam todas

realizadas no final de seu processamento


Todas as escritas de uma transao formam uma ao atmica; e

nenhuma transao pode ser executada enquanto uma transao estiver sendo escrita
Uma transao que aborta reiniciada com um novo timestamp

Banco de Dados II

Manuseio de Deadlock
Considere as duas transaes a seguir:

T1: write (X) T2: write(Y) write (Y) write (X) Escalonamento com deadlock

T1
lock-X on X write (X)

T2
lock-X on Y write (Y) wait for lock-X on X

wait for lock-X on Y

Banco de Dados II

Manuseio de Deadlock

O sistema est em deadlock se existe um conjunto de transaes tal que cada transao no conjunto est esperando por outra transao no conjunto. Protocolos de Preveno de Deadlock garantem que o sistema nunca entrar em um estado de deadlock. Algumas estratgias de preveno so: Exigir que cada transao bloqueie todos os seus itens de dados antes de iniciar a execuo (pr-declarao). Impor ordenao parcial de todos os itens de dados e exigir que uma transao possa bloquear itens de dados somente na ordem especificada pela ordem parcial (protocolo baseado em grafos).

Banco de Dados II

Outras Estratgias de Preveno de Deadlock


Os esquemas a seguir usam apenas timestamps de transao para garantir a preveno de deadlocks. esquema wait-die (esperar-morrer) - no preemptivo
Transaes mais antigas podem esperar que transaes mais

novas liberem itens de dados. Transaes mais novas nunca esperam pelas mais antigas. Em vez disso, elas sofrem rollback. Uma transao pode morrer vrias vezes antes de adquirir um item de dado.

esquema wound-wait (ferir-esperar) - preemptivo


Transaes mais antigas ferem (foram o rollback) de

transaes mais novas em vez de esperar por elas. Transaes mais novas podem esperar pelas mais antigas.
Pode ocorrer menos rollbacks que o esquema wait-die.

Banco de Dados II

Preveno de Deadlock (Cont.)

Em ambos os esquemas wait-die e wound-wait, uma transao que sofreu rollback reiniciada com o seu timestamp original. Assim, transaes mais antigas tm precedncia sobre as mais novas, e a inanio evitada. Esquemas com base em Timeout: Uma transao espera por um bloqueio somente por uma quantidade especificada de tempo. Aps esse tempo, ocorre um timeout e a transao sofre rollback. Assim, deadlocks so impossveis. Simples de implementar, mas pode ocorrer inanio. Tambm difcil de determinar um valor ideal para o intervalo de timeout.

Banco de Dados II

Deteco de Deadlock (Cont.)

Deadlocks podem ser descritos como um grafo de espera (wait-for graph), que consiste de um par G = (V,E),
V um conjunto de vrtices (todas as transaes do sistema)
E um conjunto de arestas; cada elemento um par

ordenado Ti --> Tj.

Se Ti --> Tj est em E, ento existe uma aresta direcionada de Ti para Tj, indicando que Ti est esperando que Tj libere um item. Quando Ti solicita um item de dado que est sendo mantido por Tj, ento uma aresta Ti --> Tj inserida no grafo de espera. Esta aresta ser removida somente quando Tj no mais estiver mantendo um item de dado exigido por Ti. O sistema est em um estado de deadlock se e somente se o grafo de espera tiver um ciclo. Deve-se invocar um algoritmo de deteco de deadlocks periodicamente para procurar por ciclos.

Banco de Dados II

Deteco de Deadlock (Cont.)

T26
T25 T27

T28
T25

T26

T28

T27
Grafo de espera com ciclo

Grafo de espera sem ciclo

Banco de Dados II

Recuperao de Deadlocks

Quando um deadlock detectado: Alguma transao ter que sofrer rollback (fazer uma vtima) para quebrar o deadlock. Escolher como vtima a transao que ir incorrer em um custo mnimo. Rollback - determinar quanto da transao deve ser desfeito Rollback total: Abortar a transao e ento reinici-la. O mais eficiente fazer o rollback da transao somente o necessrio para quebrar o deadlock. Ocorrer a inanio se a mesma transao for escolhida sempre como vtima. Incluir o nmero de rollbacks como fator de custo para evitar inanio.

S-ar putea să vă placă și