Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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
Banco de Dados II
solicitado for compatvel com os bloqueios j mantidos sobre o item por outras transaes
Matriz de compatibilidade de bloqueio
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
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)
as transaes enquanto solicita e libera bloqueios. Os protocolos de bloqueio restringem o conjunto de escalonamentos possveis.
Banco de Dados II
T2
Banco de Dados II
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
Banco de Dados II
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
Banco de Dados II
por conflito.
Requer que cada transao emita solicitaes de bloqueio
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
Banco de Dados II
Banco de Dados II
Banco de Dados II
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)
Banco de Dados II
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
begin
se for preciso, espera at que nenhuma outra transao tenha um bloqueio sobre D, if Ti tem um bloqueio-S sobre D then
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
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
Se di dj ento qualquer transao acessando di e dj precisa Implica que o novo conjunto D agora pode ser visto como um
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.
qualquer momento.
Um item de dados que foi bloqueado e desbloqueado 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
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
bloqueio
granularidade maior (mais alto na rvore): baixa sobrecarga de bloqueio, baixa
concorrncia
Banco de Dados II
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
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
IS IS IX S S IX
IX
S IX
Banco de Dados II
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
Banco de Dados II
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
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).
Banco de Dados II
T1
T2 read(Y)
T3
T4
T5 read(X)
read(Y)
read(X)
write(Y) write(Z)
Banco de Dados II
ser recupervel.
Banco de Dados II
Ti
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
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
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
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.
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
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
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
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
T26
T25 T27
T28
T25
T26
T28
T27
Grafo de espera com 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.