Você está na página 1de 47

Tcnicas de Controle de Concorrncia

Laboratrio de Bancos de Dados


Joo Eduardo Ferreira e Jos Alcazar

Elmasri, R.; Navathe, S. B. Sistemas de Banco de


Dados, 4ed. Pearson Addison Wesley, 2005 (Caps.
17 e 18)
Introduo
 Discutiremos tcnicas de controle de
concorrncia usadas para assegurar a
propriedade de isolamento. Assegurar a
seriao usando um conjunto de regras. Ex:
tcnicas de bloqueio. Mais usada na prtica.
Agenda
 Tcnicas de bloqueio.
 Tcnicas de controle de concorrncia de
Multiverso.
 Granularidade.
 Usando Bloqueios para o controle de
concorrncia em ndices.
 Tpicos adicionais.
Tcnicas de Bloqueio
 Um bloqueio (lock) uma varivel associada a um
item de dados que descreve a condio do item em
relao s possveis operaes que podem ser
aplicadas a ele.
 A seguir discutiremos a natureza e os tipos de
bloqueio.
 Depois apresentaremos protocolos que usam bloqueio
para garantir seriao de planos.
 Finalmente apresentaremos dois problemas
associados ao uso de bloqueios.
Tipos de Bloqueio e Tabelas de
Bloqueio de Sistema
 Apresentaremos os diversos tipos de bloqueios gradualmente,
comeando desde os mais simples e restritivos.
 Bloqueios binrios. So de dois estados ou valores: bloqueios
(1) e desbloqueios (0). Se o valor do bloqueio em X for 1, o item
no pode ser acessado. Se for 0, o item pode ser acessado
quando solicitado  LOCK(X).
 Duas operaes, lock_item e unlock_item, so usadas com o
bloqueio binrio.
 Uma transao solicita o acesso a um tem por meio de um
lock_item. Tendo acesso ao item ela bloqueia o acesso s outras
transaes at fazer um unlock_item, permitindo o acesso ao
item. Permite excluso mutua. Veja fig.
Figura 18.1 Operaes de bloqueio e desbloqueio para bloqueios binrios.

Unidades
indivisveis
sees crticas

Existe uma fila de espera associada ao comando wait.


Bloqueios binrios
 muito simples implementar um bloqueio binrio;
necessrio uma varivel binria LOCK associada a
cada item. Simplificando, cada bloqueio pode ser um
registro de 3 campos <nome do item,LOCK, transao
de bloqueio>, mais uma fila para as transaes que
esto esperando acessar o item.
 Esses registros podem ser mantidos para os items
bloqueados numa tabela de bloqueio. Pode estar
organizada como uma tabela hash. O sistema
gerenciador de bloqueio encarregado.
Bloqueios binrios
 Com este esquema, toda transao deve obedecer as seguintes
regras (impostas pelo mdulo gerenciador de bloqueios):
Uma transao T deve garantir a operao lock_item(X) antes que
qualquer operao ler_item(X) ou escrever_item(X) seja executada.
Uma transao T deve garantir a operao unlock_item(X) depois
que todas as operaes ler_item(X) ou escrever_item(X) sejam
completadas.
Uma transao T no executar uma operao lock_item(X) se ela j
tiver o bloqueio no item X.
Uma transao T no executar uma operao unlock_item(X), a
menos que ela j tenha o bloqueio no item X.
 Neste caso duas transaes no podem acessar o mesmo item
ao mesmo tempo.
Bloqueios
Compartilhados/Exclusivos (ou
Leitura/Escrita)
 Bloqueio binrio muito restritivo. Um item X poderia ser
acessado por vrias transaes no caso de leitura. No
caso de alterao, uma transao deve ter acesso
exclusivo.
 Os bloqueios compartilhados tm essa funo.
 Tm trs operaes de bloqueio: read_lock(X),
write_lock(X) e unlock(X).
 Um item read_locked chamado de bloqueado-
compartilhado
 Um item write_locked chamado de bloqueado-
exclusivo.
Bloqueios
Compartilhados/Exclusivos (ou
Leitura/Escrita)
 Implementar: cada registro da tabela de bloqueio ter 4 campos: <
nome do item,LOCK, num_de_leituras, transao(es)_bloqueio>.
O valor de LOCK ou bloqueado para leitura ou escrita.
 Se LOCK(X) = write_locked, o valor de transao(es)_bloqueio
uma nica transao que controla o bloqueio exclusivo em X.
 Se LOCK(X) = read_locked, o valor de transao(es)_bloqueio
uma lista de uma ou mais transaes que controlam o bloqueio
compartilhado em X.
 Veja figura descrevendo as trs operaes.
Figura 18.2 Operao de bloqueio e desbloqueio para bloqueios de dois modos
(leitura-escrita ou compartilhado-exclusivo).
Figura 18.3 Tabela hashing de bloqueios.

Tabela de Bloqueios

Concedido
Esperando
Bloqueios
Compartilhados/Exclusivos (ou
Leitura/Escrita)
 Quando usamos o esquema de bloqueio Compartilhados/Exclusivo,
o sistema deve impor as regras:
1. Uma transao T deve garantir a operao read_lock(X) ou
write_lock(X) antes de qualquer operao ler_item(X) ser executada em
T.
2. Uma transao T deve garantir a operao write_lock(X) antes de
qualquer operao escrever_item(X) ser executada em T.
3. Uma transao T deve garantir a operao unlock(X) depois que todas
as operaes ler_item(X) e escrever_item(X) so completadas em T.
4. Uma transao T no usar uma operao read_lock(X) se ela j
controlar um bloqueio de leitura ou um bloqueio de escrita no item X.
Relaxada.
5. Uma transao T no usar uma operao write_lock(X) se ela j
controlar um bloqueio de leitura ou um bloqueio de escrita no item X.
Relaxada.
6. Uma transao T no usar uma operao unlock(X) a menos que ela
j controle um bloqueio de leitura ou de escrita em um item X.
Figura 18.4 Transaes que no obedecem ao bloqueio em duas fases.
(a) Duas transaes T1 e T2. (b) Resultado dos possveis planos
de execuo seriais de T1 eT2. (c) Um plano de execuo no
serializvel S que usa bloqueios.

Os bloqueios binrios ou
compartilhados no
garantem seriao.
Garantindo seriao pelo Bloqueio
em Duas fases
 Uma transao segue o protocolo de bloqueio em
duas fases se todas as operaes de bloqueio
precedem a primeira operao de desbloqueio. Tem
duas fases:
1. expanso ou crescimento: novos bloqueios nos itens podem
ser adquiridos, mas no podem ser liberados; e
2. encolhimento: os bloqueios existentes podem ser liberados,
mas novos bloqueios no podem ser adquiridos.
Com converso de bloqueios, a promoo feita
durante a expanso, e o rebaixamento na fase de
encolhimento.
As transaes T1 e T2 da figura passada no
seguem o protocolo em duas fases. Qual o motivo?
Figura 18.4 Transaes que no obedecem ao bloqueio em duas fases.
(a) Duas transaes T1 e T2. (b) Resultado dos possveis planos
de execuo seriais de T1 eT2. (c) Um plano de execuo no
serializvel S que usa bloqueios.

Desbloqueio e
aps outro
Desbloqueio bloqueio
e aps outro
bloqueio
Garantindo seriao pelo Bloqueio
em Duas fases
 As transaes T1 e T2 (reescritas de T1 e T2) para
impor o bloqueio em duas fases (Veja Fig. 18.4). O
plano de execuo acima no pode ser gerado.
 Pode ser provado que, se toda transao em um plano
seguir o protocolo de bloqueio em duas fases,
garantido que o plano seja serializvel.
 O bloqueio em duas fases pode limitar a quantidade de
concorrncia que pode surgir em um plano de
execuo.
Figura 18.5 Transaes T1 eT2, que so as mesmas que T1 e T2 da Figura
18.3, mas que seguem o protocolo de bloqueio de duas fases.
Observe que elas podem produzir um deadlock.

Expanso Expanso

Encolhimento Encolhimento
Bloqueio em Duas Fases Bsico,
Conservador, Estrito e Rigoroso
 Vrios tipos de bloqueios em duas fases (2PL), o
mencionado acima o bsico.
 2PL Conservador ou esttico: a transao deve
bloquear todos os itens que ela acessa antes de iniciar
a sua execuo. Difcil de usar na prtica devido
necessidade da pr-declarao de read-set e write-set
que no possvel na maioria das situaes.
 2PL Estrito, garante planos estritos. T no libera
nenhum de seus bloqueios exclusivos at que ela
efetive ou aborte.
Lidando com Deadlock (Impasse)
e Starvation (Inanio)
 O deadlock ocorre quando cada transao em
um conjunto de duas ou mais transaes
espera por algum item que esteja bloqueado
por alguma outra transao T no conjunto.
Ex: fig. 18.5 as transaes T1 e T2 esto
em deadlock. Nenhuma transao pode
acessar os itens X e Y.
Figura 18.5 Ilustrao do problema de deadlock: plano de execuo parcial de
T1 e T2 que est em um estado de deadlock.
Protocolos de Preveno de
Deadlock
 Um protocolo de preveno para bloqueios em
duas fases conservador, requer que cada
transao bloqueie todos os itens que ela
necessita no avano (no prtico). Ela no
comea at no conseguir bloquear todos os
itens que precisa. Limita a concorrncia.
 Outra opo envolve a ordenao de todos os
itens no BD. A transao que os necessita, os
bloquear nessa ordem. No prtico.
Protocolos de Preveno de
Deadlock
 Outros esquemas, permitem decidir o que fazer com
uma transao envolvida em uma possvel situao de
deadlock: ela deveria ser bloqueada e ter de esperar
ser abortada ou assumir e abortar uma outra
transao?
 Usam o conceito de timestamp da transao TS(T), id
nico para cada transao. Baseados na ordem em
que as transaes so iniciadas.
 TS(T1)<TS(T2), se T1 inicia antes de T2.
 Dois esquemas: esperar-morrer (wait-die) e ferir-
esperar (wound-wait)
Protocolos de Preveno de
Deadlock
 Suponha que Ti tente bloquear um item X mas no
pode porque X est bloqueado por Tj com um bloqueio
conflitante. As regras seguida so:
Esperar-morrer: Se TS(Ti)<TS(Tj), Ti pode esperar; seno (Ti
mais nova) aborta Ti e reinicia mais tarde com o mesmo
timestamp. As transaes mais velhas so as que esperam,
nenhum ciclo criado.
Ferir-esperar: Se TS(Ti)<TS(Tj), aborta Tj (Ti fere Tj) e
reinicia mais tarde com o mesmo timestamp; seno (Ti mais
nova) Ti espera. As transaes somente esperam as mais
velhas, nenhum ciclo criado.
 Ambos os esquemas finalizam abortando a transao
mais jovem, que pode estar envolvida em um
deadlock. Problema de aborto desnecessrio.
Protocolos de Preveno de
Deadlock
 Outro grupo que no usa timestamp: algoritmos no
waiting e cautious waiting.
No waiting, se uma transao no estiver apta a obter um
bloqueio, ela ser imediatamente abortada e, ento, reiniciada
depois de um certo tempo.
cautious waiting, diminui o nmero de abortos
desnecessrios. A transao Ti tenta bloquear X, mas no
pode porque Tj o bloqueou.
 Se Tj no est bloqueado (no est esperando por algum outro
item bloqueado), ento Ti bloqueado e poder esperar; caso
contrrio, aborta Ti.
dead-lock free.
Deteco de Deadlock e Timeouts
 Neste caso o sistema verifica se um estado de deadlock
realmente existe. atrativa se soubermos que existem poucas
interferncias entre as transaes (transaes curtas, bloqueando
poucos itens). Caso contrrio, melhor preveno.
 Grafo wait-for. Um n por cada transao sendo executada.
Quando uma transao Ti est esperando bloquear um item X
bloqueado por Tj, uma ligao (Ti  Tj) criada no grafo. A
ligao eliminada quando X for liberada. Existe um deadlock
quando este grafo tiver um ciclo.
 O problema quando verificar? : nmero de transaes
concorrentes e tempo de espera mdio.
Deteco de Deadlock e Timeouts
 Em estado de deadlock, algumas transaes
devem ser abortadas. Seleo de vitimas.
Evitar selecionar transaes em execuo h
muito tempo e com muitas atualizaes.
 Outro esquema: timeouts. Mtodo prtico, se
uma transao esperar por um perodo maior
que um tempo definido, se assume que est
em deadlock e deve abortar.
Inanio (Starvation)
 Ocorre quando uma transao no pode continuar por
um perodo indefinido de tempo, enquanto que outras
so executadas.
 Parcializao do esquema de espera.
 Soluo um esquema de espera imparcial  uma fila.
 Outro esquema o de prioridade por tempo de espera
ou abortadas muitas vezes. Os esquemas wait-die e
wound-wait evitam inanio.
Controle de concorrncia baseado
em ordenao de Timestamp
 Timestamp  identificador nico criado pelo
SGBD para identificar uma transao 
momento de incio da transao. TS(T).
 No so usados bloqueios  no ocorrem
deadlocks.
O algoritmo de ordenao por
Timestamp
 Se uma transao velha Ti tem um time-stamp TS(Ti), uma
transao nova Tj atribuida um time-stamp TS(Tj) tal que TS(Ti)
<TS(Tj).
 O algoritmo gerencia a execuo concorrente de tal forma que os
time-stamps determinam a ordem de seriao.
 Para fazer isso, o algoritmo associa a cada item X do BD, dois
valores de timestamp:
Read_TS(X) o maior timestamp entre todos os timestamps de transaes
que tenham lido o item X com sucesso. Read_TS(X) = TS(T), onde T a mais
nova que tenha lido X com sucesso.
Write_TS(X) o maior timestamp entre todos os timestamps de transaes
que tenham escrito o item X com sucesso. Write_TS(X) = TS(T), onde T a
mais nova que tenha escrito X com sucesso.
O algoritmo de ordenao por
Timestamp (Cont.)
 O algoritmo se certifica de que qualquer operao de
leitura ou escrita conflitante executada em ordem de
timestamp.
 Suponhamos que uma transao Ti tenta executar um
escrever_item(X)
1. Se read_TS(X) > TS(Ti) ou se write_TS(X) > TS(Ti), ento Ti
aborta e reverte, e a operao rejeitada. Uma operao mais
nova que Ti j leu ou escreveu o valor do item X antes de Ti,
violando a ordenao por timestamp.
2. Seno, Ti executa a operao escrever_item(X) e grava
write_TS(X) com TS(Ti).
O algoritmo de ordenao por
Timestamp (Cont.)
 Suponhamos que uma transao Ti tenta
executar um ler_item(X).
1. Se write_TS(X) > TS(Ti ), ento Ti aborta, reverte e
rejeita a operao. Isso ocorre porque alguma
transao mais nova, j teria escrito o valor no item
X antes que Ti tivesse a chance de ler X.
2. Se write_TS(X) TS(Ti ), ento executa a operao
de ler_item(X) de Ti, , e atualiza read_TS(X) com
max(TS(Ti,), read_TS(X)).
Tcnicas de Controle de
Concorrncia de Multiverso
 Armazenam valores antigos dos itens atualizados.
Uma transao acessa uma verso apropriada do item
com o objetivo de manter, se possvel a serializao.
 A idia que algumas operaes de leitura que foram
rejeitadas por outras tcnicas, possam ser aceitas
acessando uma verso mais antiga do item,
garantindo a serializao.
 Uma desvantagem o espao necessrio para
armazenar as mltiplas verses. Entretanto isto j
feito para a recuperao e em BDs temporais.
Tcnica de multiverso Baseada
em ordenao por Timestamp.
 Neste mtodo, diversas verses X1, X2,...,Xk de cada
item de dado X so armazenadas. Para cada verso
de X, os dois timestamps so mantidos: read_TS(Xi) e
write_TS(Xi).
 Se uma transao T pode executar uma operao
escrever_item(X), uma nova verso Xk+1 do X ser
criada com read_TS(Xk+1) e write_TS(Xk+1),
atualizadas para TS(T).
 Quando T pode ler o valor da verso Xi, o valor de
read_TS(Xi) ser atualizado para max(read_TS(Xi),
TS(T))
Tcnica de multiverso Baseada
em ordenao por Timestamp
 Suponhamos que a transao Ti executa uma operao ler_item(X) ou
escrever_item(X). Seja Xk a verso de X cujo write_TS(X) o mais alto
de todas as verses de X, que tambm menor ou igual TS(Ti).
1. Se a transao Ti executa um ler_item(X), ento o valor retornado o
contedo da verso Xk.
2. Se a transao Ti executa um escrever_item(X)
1. Se TS(Ti) < read_TS(Xk), ento a transao Ti abortada.
2. Se TS(Ti) = write_TS(Xk), o contedo de Xk sobre-escrito
3. Seno uma nova verso de X criada.
 Observe que
A leitura sempre tem sucesso
Uma escrita de Ti rejeitada se alguma outra transao Tj que (na ordem de
serializao definida pelos valores de timestamp) deveria ler o escrito po Ti,
tem j lido a verso j criada por uma transao mais velha que Ti.
 O Protocolo garante seriao
Bloqueio em Duas fases de
Multiverso Usando Bloqueios de
Certificao
 H 3 modos de bloqueio: ler, gravar e
certificar. LOCK(X) = read_locked ou
write_locked ou certify_locked ou unlocked.
 Fig. 18.6a.  tabela de compatibilidade de
bloqueio padro.
 A idia deste protocolo permitir que outras
transaes T leiam um item X enquanto uma
transao T mantem um bloqueio de escrita
sobre X.
Bloqueio em Duas fases de
Multiverso Usando Bloqueios de
Certificao
 Isto possvel utilizando-se duas verses para cada item X; uma
verso deve sempre ser gravada por alguma transao efetivada.
A segunda verso X criada quando uma transao T adquire
um bloqueio em um item.
 Outras transaes podem continuar lendo a verso efetivada de
X, enquanto T controla o bloqueio de escrita em X sem afetar a
verso efetivada.
 Uma vez T esteja pronta para efetivar, ela deve obter um bloqueio
de certificao de todos os itens bloqueados para gravao.
 O bloqueio de certificao no compatvel com os bloqueios de
leitura, assim, a transao pode atrasar a sua efetivao at que
todos os itens de escrita bloqueados sejam liberados  para
obter os certificados de bloqueio.
Bloqueio em Duas fases de
Multiverso Usando Bloqueios de
Certificao
 Uma vez os certificados so adquiridos, a
verso X efetivada atribudo o valor X, que
descartada e os bloqueios de certificao
so liberados. Veja a nova tabela de
compatibilidade de bloqueio  Fig. 18.6b.
Figura 18.6 Tabelas de compatibilidade de bloqueio. (a) Uma tabela de
compatibilidade para o esquema de bloqueio read/write. (b) Uma tabela de
compatibilidade para o esquema de bloqueio
ler/escrever/certificar.
Granularidade
 Um item de BD pode ser:
Um registro.
Um valor de um campo de um registro.
Um bloco de disco.
Um arquivo.
Um banco de dados inteiro.
 A granularidade pode afetar a execuo do
controle de concorrncia e recuperao.
Consideraes sobre Nveis de
Granularidade para Bloqueio
 O tamanho dos itens de = granularidade.
 Quanto maior o tamanho do item de dados mais baixo o grau de
concorrncia permitido
 Porm, quanto menor o tamanho do item de dados, maior ser o
nmero de itens em um BD  maior nmero de bloqueios ativos,
mais operaes de bloqueio e desbloqueio sero executadas:
maior sobrecarga do sistema.
 Qual o melhor tamanho do item?
 Depende dos tipos de transaes envolvidas. Se uma transao
tpica acessa muitos registros em um mesmo arquivo 
granularidade maior.
Bloqueio de Nvel de
Granularidade Mltipla
 J que o melhor tamanho de granularidade
depende da transao dada mltiplos nveis de
granularidades.
 Veja fig. 18.7. Suporte ao protocolo 2PL de nvel de
granularidades mltipla. Ex: T1 bloqueando f1 e T2
r1nj. Tentar bloquear T1 complicado.
 Para tornar prtico este protocolo bloqueios de
inteno.
 A idia que a transao indique, ao longo do
caminho da raz ao n desejado, qual tipo de
bloqueio ele ir solicitar.
Bloqueio de Nvel de
Granularidade Mltipla
 Trs tipos de bloqueio:
Inteno-compartilhada (IS) indica que bloqueio(s)
compartlhado(s) ser(o) solicitado(s) em algum(ns)
n(s) descendentes(s)
Inteno-exclusva (IX) indica que bloqueio(s)
exclusvo(s) ser(o) solicitado(s) em algum(ns)
n(s) descendentes(s)
Inteno-compartilhada-exclusva (SIX) indica que o
n corrente est bloqueado compartilhado, mas
bloqueio(s) exclusivo(s) ser(o) solicitado(s) em
algum(ns) n(s) descendentes(s)
Bloqueio de Nvel de Granularidade
Mltipla
 Veja a tabela de compatibilidade dos bloqueios de inteno. Fig.
18.8
 O protocolo de bloqueio de granularidade mltipla (MGL) consiste
das seguintes regras:
1 Cumprir a compatibilidade definida na tabela 18.8
2 A raz da rvore deve ser bloqueada primeiro (qualquer modo)
3 Um n pode ser bloqueado no modo S ou IS por uma transao T, s
se o pai estiver bloqueado pela transao T no modo IS ou IX.
4 Um n pode ser bloqueado no modo X, IX ou SIX por uma transao T,
s se o pai estiver bloqueado pela transao T no modo IX ou SIX.
5 Uma transao pode bloquear um n apenas se ela no tiver nenhum
n desbloqueado (2PL)
6 Uma transao T pode bloquear um n apenas se nenhum dos seus
ns filhos estiverem correntemente bloqueados por T.
Figura 18.7 Uma hierarquia de granularidade para ilustrar bloqueio de nvel de
granularidade mltipla.
Figura 18.8 Uma matriz de compatibilidade de bloqueio para bloqueio
de granularidade mltipla.
Figura 18.10 Operaes de bloqueio para ilustrar um plano de execuo
serializvel.

T1 quer atualizar os registros r111 at


r211;
T2 quer atualizar todos os registros na
pgina p12; e
T3 quer ler o registro r11j e o arquivo
f2.

Este protocolo til quando


existem uma mistura de transaes:
longas e curtas.

Você também pode gostar