BD II – Contro le de Concorrência · a requisição de um bloqueio compartilhado de um item de...

32
BD II – Controle de Concorrência Professor: Luis Felipe Leite

Transcript of BD II – Contro le de Concorrência · a requisição de um bloqueio compartilhado de um item de...

BD II – Controle de

Concorrência

Professor: Luis Felipe Leite

Contato

[email protected]

Ciclo de três aulas

Processamento de transações.

Controle de Concorrência.

Recuperação de Falhas.

Controle de Concorrência

Ajuda a garantir a propriedade de isolamento entre transações concorrentes.

Previne estados de inconsistência no banco.

Resolve os famosos conflitos WR, RW, WW.

Bloqueio

Existem algumas formas de se fazer controle de concorrência.

Os mecanismos de bloqueio como controles de concorrência são um dos mais básicos a serem usados.

Um bloqueio, será uma variável associada a um item de dado.● Lock (x)

Bloqueio

O bloqueio irá definir a condição do item para as outras transações que querem acesso a ele.● Bloqueado ou desbloqueado.

Os mecanismos de bloqueio de dados em um SGBD se resumem a o “Bloqueio Binário” e aos “Bloqueios Compartilhados/Exclusivos”.

Bloqueio Binário

O bloqueio binário opera colocando o item em apenas dois estados, sendo eles bloqueado (lock) e desbloqueado (unlock).

lock_item(x) e unlock_item(x)

Quando o status do item está em lock, ele não poderá ser acessado quando solicitado por outra transação. Esta por sua vez terá que esperar pelo estado unlock.

Bloqueio Binário

lock(x):● Será emitido se x ainda não estiver bloqueado.● Virá antes de qualquer operação leitura

gravação.

unlock(x):● Será emitido apenas se x estiver em estado

bloqueado.● Virá após todas as operações de leitura e

gravação terem sido finalizadas.

Bloqueio Binário – Algoritmo lock

B: if ( LOCK(X) = 0 ) thenLOCK(X) ← 1

else {wait (until LOCK(X) = 0 and

<the lock manager wakes up the transaction>)

goto B

(ELMASRI, 2010)

Bloqueio Binário – Algoritmo unlock

LOCK(X) ← 0if <any transaction are waiting> then

wake up one of the waiting transactions;

(ELMASRI, 2010)

Bloqueio Binário – Problemas

Toda vez que eu for usar um item, é realmente necessário bloquear ele para leitura e gravação?

E o conflito leitura-leitura??

Se várias pessoas estiverem apenas lendo, por que não fazer a coisa mais compartilhada?

Bloqueio compartilhado/exclusivo

Mecanismo para sanar o problema de não ter problema na leitura – leitura.

Bloqueio compartilhado:● Shared lock ou read lock.● Mais de uma transação pode solicitá-lo.● Impede que seja requisitado um bloqueio exclusivo.

Bloqueio compartilhado/exclusivo

Bloqueio exclusivo:● Exclusive lock ou write lock.● Utilizado para gravação.● Apenas uma transação pode solicitá-lo.

Matriz de compatibilide:● Shared S N● Exclusive N N

Existe um gerenciador de bloqueio que mantém uma tabela de controle onde consta informações da transação, item, modo e próximo item.

Bloqueio Compartilhado / Exclusivo – Algoritmo rlock(x)

B: if LOCK(X) = “unlocked” then {LOCK(X) ← “read-locked”no_of_reads(x) ← 1

}else if LOCK(X) = “read-locked” then

no_of_reads(x) ++ else {

wait (until LOCK(X) = “unlocked” and<the lock manager wakes up the transaction>)

goto B }

(ELMASRI, 2010)

Bloqueio Compartilhado / Exclusivo – Algoritmo wlock(x)

B: if LOCK(X) = “unlocked” then {LOCK(X) ← “write-locked”

else {wait (until LOCK(X) = “unlocked” and

<the lock manager wakes up the transaction>)

goto B }

(ELMASRI, 2010)

Bloqueio Compartilhado / Exclusivo – Algoritmo unlock(x)

B: if LOCK(X) = “write-locked” then {LOCK(X) ← “unlocked”wakeup up one of the transaction, if any

}else if LOCK(X) = “read-locked” then

no_of_reads(x) –if no_of_reads(x) = 0 then {

LOCK (X) ← “unlocked”;wait (until LOCK(X) = “unlocked”

wakeup up one of the transactions,if any

}

(ELMASRI, 2010)

Bloqueio Compartilhado / Exclusivo

O item só entrará em rlock(x) se:● Antes de read(x);● Se não for detectado nenhum estado rlock ou wlock.

Em wlock(x) se:● Ante de read(x) com intenção de write(x);● Antes de write(x);● Se não for detectado nenhum wlock.

Unlock:● Depois de todas as operações de ler e gravar;● Apenas se for detectado algum lock.

Bloqueio Compartilhado / Exclusivo - Problemas

● Deadlock: Consideremos que existem duas transações A e B, a transação A está esperando por algum item que está bloqueado na transação B, e a transação B está esperando por algum item que está bloqueado em A, então, ambas ficam na fila de espera, aguardando que seja liberado o bloqueio de um item, como isso não ocorre, as duas transações acabam nunca conseguindo ser concluídas.

Bloqueio Compartilhado / Exclusivo - Problemas

● Starved ou Starvation: Outro problema que pode ocorrer é o starverd (ou starvation). Consideremos que existem três transações A, B e C, a transação A faz a requisição de um bloqueio compartilhado de um item de dado, logo em seguida a transação B faz uma requisição de bloqueio exclusivo do mesmo item de dado, como a transação A está usando o bloqueio compartilhado do item, logo a transação B não poderá deter o acesso, o que faz com que ela fique na fila de espera, até a liberação do mesmo. Enquanto a transação B está na fila, chega a transação C com o pedido de compartilhamento do mesmo item, como é possível fazer o compartilhamento do item que A está usando, então, a transação C passa na frente de B e consegue o compartilhamento do item de dado da transação A. Quando a transação A terminar de desocupar, o item de dado continuará ocupado pela transação C, enquanto isso, a transação B continuará aguardando a liberação total do item de dado para que ela possa fazer o bloqueio exclusivo. Caso as próximas transações sejam sempre de acesso compartilhado deste mesmo item, a transação B nunca conseguirá fazer um progresso, e então, ela é considerada estagnada.

Protocolo Two Phase (2PL) Locking

Garante Serialização

O protocolo trabalha junto com o bloqueio em duas fases.

● Fase de crescimento.● Fase de encolhimento.

Protocolo Two Phase (2PL) Locking

Protocolo Two Phase (2PL) Locking

Protocolo Two Phase (2PL) Locking

O protocolo então garante serialização.

O plano será produzido em tempo real já serial.

Usando o conceito de ciclos conseguimos entender isso.

Protocolo Two Phase (2PL) Locking

Não resolve os problemas de deadlock e starvation.

É possível resolver ambos.

Protocolo Two Phase (2PL) Locking – Conservador ou Estático

Bloqueia todos os itens que vão ser lidos e gravados antes de iniciar a transação.

Ou pega tudo ou solta tudo.

Isso garante um plano livre de deadlocks.

Exige que as transações sejam pré declaradas no ínicio.

Protocolo Two Phase (2PL) Locking – Estrito e Rigoroso

Estrito:● Não libera wlock até que seja feito commit.● Garante que T só vai ler ou gravar valores

que foram “comitados”, garantido cascadeless.

Estrito:● Segue a mesma ideia, mas não libera wlock

e também rlock.

Outras formas de prevenir deadlock - TimeStamp

Nenhuma transação tem o mesmo timestamp que a outra.

Imagine que uma transação Ti quer o lock(x) e Tj já tem lock(x).

Caso eles tenham direito iguais, você gera o deadlock, pois ambos vão se esperar eternamente.

Outras formas de prevenir deadlock - TimeStamp

Stamp (Ti) < Stamp (Tj) Maior prioridade

Técnica Wait -Die (Esperar – Morrer):● Ti pede o lock para Tj que já detinha o lock.

Caso Ti tenha prioridade sob Tj, ou seja, tenha um menor timestamp, ele espera. Se Ti não tiver prioridade ele aborta.

Outras formas de prevenir deadlock - TimeStamp

Técnia Wound – Wait ( Ferir – Esperar):● Caso Ti tenha prioridade e chegou

querendo o lock, Tj abortará. Se não tiver prioridade, Ti espera.

Outras formas de prevenir deadlock

O banco de dados verifica o grafo de espera, caso seja detectado o deadlock ou vários deles, o bd usa de um algoritmo de seleção de vítima, geralmente abortando a transação mais recente.

Timeout.

E starvation??

First in First out.

Prioridade aumenta enquanto espera.

Até aula que vem – Prova