Você está na página 1de 50

UNIVERSIDADE FEDERAL DO CEAR CAMPUS SOBRAL

ENGENHARIA DA COMPUTAO SISTEMA DE GERENCIAMENTO DE BANCO DE DADOS PROF. MARCOS BENDOR

CONTROLE DE CONCORRCIA DE MULTIVERSO, DEADLOCK E OPERAES DE INCLUSO E EXCLUSO

EQUIPE: ALNIO FERREIRA GERARDO MEDEIROS DANILO LIMA

CONTEDO PROGRAMTICO

RECAPITULANDO CONCEITOS;

CONTROLE DE CONCORRNCIA DE MULTIVERSO;


DEADLOCKS; OPERAES DE INCLUSO E EXCLUSO.

RECAPITULANDO CONCEITOS...
TRANSAO: uma seqncia de operaes

executadas como uma nica unidade lgica de trabalho.


Exemplo:

RECAPITULANDO CONCEITOS...
CONCORRNCIA:

quando dois ou mais processos so executados simultaneamente e disputam o acesso a recursos compartilhados.

RECAPITULANDO CONCEITOS...
CONCORRNCIA + BANCO DE DADOS
Recursos:
Registros; Tabelas; Itens de dados.

Transaes executadas simultaneamente! Recursos acessados de maneira concorrente!

RECAPITULANDO CONCEITOS...
CONCORRNCIA + BANCO DE DADOS

RECAPITULANDO CONCEITOS...
Quando

inmeras transaes so executadas simultaneamente, a propriedade de isolamento pode no ser mais preservada.

PROBLEMA = BANCO DE DADOS INCONSISTENTE!!

SOLUO = CONTROLE DE CONCORRNCIA

RECAPITULANDO CONCEITOS...
Protocolos baseados em:
Bloqueios,

Grafos, Timestamps, Validao, etc;

CONTROLE DE CONCORRNCIA EM MULTIVERSO

CONTROLE DE CONCORRNCIA EM MULTIVERSO


Um pouco de histria...
Artigo

publicado em 1981: "Concurrency Control in Distributed Database Systems, escrito por Philip Bernstein and Nathan Goodman; Dissertao sobre MVCC original public. em 1971 por David P. Reed. Primeiro SGBD: VAX da Digital Rdb/ELN. Segundo: InterBase (Ainda ativo).

CONTROLE DE CONCORRNCIA EM MULTIVERSO


Banco de dados que utilizam...

CONTROLE DE CONCORRNCIA EM MULTIVERSO

Em um SGBD que usa multiverso, cada write() em um item de dados Q, por exemplo, produz uma nova cpia (ou verso) de Q. Quando uma transao emite uma operao de read() em Q, o SGBD seleciona uma das verses de Q para ser lida.

CONTROLE DE CONCORRNCIA EM MULTIVERSO


Exemplos com o PostgreSQL: Estado Inicial (Alterao):

Comando a ser Executado: UPDATE FROM Clientes SET Saldo = Saldo - 2500 WHERE cod = 2;

CONTROLE DE CONCORRNCIA EM MULTIVERSO


Exemplos com o PostgreSQL: Estado Final (Alterao):

ORDENAO POR TIMESTAMPS EM MULTIVERSO


A cada transao Ti do sistema associado um timestamp nico e esttico, denotado por TS(Ti). Para cada item de dado X, uma sequncia de verses {X1, X2, ..., Xm} associada. Cada verso Xk contm trs campos.

Xk = (Contedo, read_TS, write_TS)

ORDENAO POR TIMESTAMPS EM MULTIVERSO


Contedo:

Valor da verso Xi

read_TS(Xi) :

O timestamp de leitura de Xi o maior entre todos os timestamp de transaes que tenham lido com sucesso a verso Xi de X write_TS(Xi) : O timestamp de escrita de Xi o timestamp da transao que gravou o valor da verso Xi

ORDENAO POR TIMESTAMPS EM MULTIVERSO


Procedimento Sempre que uma transao T3 for autorizada a executar uma operao w r i t e (X), uma nova verso Xk+1 de X criada, com:
write_TS(Xk+1)= TS(T3) e

read_TS(Xk+1)= TS(T3)

Quando T1 l o valor da verso Xi, o valor de read_TS(Xi) ajustado:


read_TS(Xi)= max(read_TS(Xi),TS(T3))

ORDENAO POR TIMESTAMPS EM MULTIVERSO


Para garantir seriao (duas regras)
1. Uma transao T3 emite uma operao write(X):

Se read_TS(Xi) > TS(T3) Aborte e Rollback T3

Seno

(H uma transao mais recente que j leu Xi) Obs.: A verso i de X tem o mais elevado write_TS(Xi) de todas as verses de X, sendo que write_TS(Xi) menor ou igual a TS(T1). Cria uma nova verso Xj de X com:

write_TS(Xj)= TS(T3) e read_TS(Xj)= TS(T3)

2. Uma transao T3 emite uma operao read(X):

Encontre a verso i de X que tem o mais elevado write_TS(Xi) entre todas as verses de X que seja menor ou igual a TS(T3)

ORDENAO POR TIMESTAMPS EM MULTIVERSO

T1
read(A); A=A500; write(A);

T2

T3

T_TS
T1 = 1;

A = 2000
R_TS(A) = 0; W_TS(A) = 0;

B = 3000
R_TS(B) = 0; W_TS(B) = 0;

*R_TS(A) = 1; Cria(A1) = 1500, R_TS(A1) = 1, W_TS(A1) = 1;

read(B); read(A); display(A+B); read(B); B= B-100; write(B);

T2 = 2; *R_TS(A1) = 2; T3 = 3;

*R_TS(B) = 2;

*R_TS(B) = 3; Cria(B1) = 2900, R_TS(B1) = 3, W_TS(B1) = 3; #R_TS(B) = 2;

read(B); B= B+500; write(B);

R-TS(B)>TS(T1) T1, T2 e T3 so abortadas;

ORDENAO POR TIMESTAMPS EM MULTIVERSO


Vantagem: Leituras nunca so bloqueadas.
Desvantagem: Mltiplas verses necessitam ser mantidas. Cada read(Q) teremos uma atualizao de R-TS(Q) (Dois acesso ao disco); Algum mecanismo deve ser utilizado para evitar aborto em cascata; Mltiplas verses necessitam ser mantidas.

BLOQUEIO EM 2 FASES EM MULTIVERSO

Combina as vantagens do controle de concorrncia em multiverso com as vantagens do protocolo de bloqueio em 2 fases.

BLOQUEIO EM 2 FASES EM MULTIVERSO

Transaes de escrita realizam um bloqueio rigoroso em duas fases; T Ou seja, mantm todos lock-X(A) os bloqueios at o final.
1

read(A); A=A500; write(A);

Cada item de dado possui um

lock-X(A); read(B); B= B+500; write(B); unlock-x(A); unlock-x(B);

nico timestamp, baseado em um contador, chamado ts-counter, o qual incrementado durante o processo.

BLOQUEIO EM 2 FASES EM MULTIVERSO


Procedimento: (Transao somente Leitura)
Marca-se os timestamps das transaes somente de

leitura por meio do valor corrente do contador (lendo o valor de ts-counter antes de comear a execuo).
Quando uma transao

Ti (somente leitura) emite um

read(Q), o valor recebido o contedo da verso cujo timestamp o inferior a TS(Ti) mais prximo.

BLOQUEIO EM 2 FASES EM MULTIVERSO


Procedimento: (Transao de atualizao/escrita)
Quando uma transao de atualizao l um item de

dados, ela impe um bloqueio compartilhado ao item, e l a sua ltima verso.

Quando uma transao de atualizao deseja escrever um item de dados, ela primeiro consegue o bloqueio exclusivo sobre esse item, e ento, cria uma nova verso do item de dado. A escrita realizada a partir da nova verso e o timestamp da nova verso recebe ;

BLOQUEIO EM 2 FASES EM MULTIVERSO


Procedimento: Transao de atualizao(escrita) Quando uma transao de atualizao Ti completa suas
aes (commit), ela realiza o processo de efetivao da seguinte forma:

Ti adiciona 1 ao valor de ts-counter e transfere esse valor


aos timestamps de todas as verses que criou;

Ti adiciona 1 ao valor de ts-counte;

BLOQUEIO EM 2 FASES EM MULTIVERSO


Procedimento: Transao de atualizao(escrita)
Somente uma transao de atualizao por vez pode

realizar o processo de efetivao.


Como consequncia, as transaes somente de leitura

que comearem depois de Ti incrementar o ts-counter acessaro o valor atualizado por Ti, enquanto aquelas que comearem antes do incremento de ts_counter, feito por Ti, vero o valor anterior atualizao de Ti. Neste caso, as transaes somente de leitura jamais precisaro esperar por bloqueios.

ORDENAO POR TIMESTAMPS EM MULTIVERSO

T1

T2

T_TS A = 1000; B = 1500;

lock-X(A); read(A); A=A500; write(A);


lock-S(B); read(B); unlock(B); lock-X(B); read(B); B=B+500; write(B); unlock(B); unlock(A); lock-S(A); read(A); Display(A+B); unlock(A);

T1 = ts_counter = 1; l A = 1000;
cria(A1)= 500; T2 = ts_counter = 1; l B = 1500;

l B = 1500; cria(B1)= 2000; Ts_counter = 2; TS(A1) = TS(B1) = Ts_counter; l A = 1000;

DEADLOCK

O que deadlock

Deadlock ou impasse o ciclo de transaes esperando por locks serem liberados de outras transaes do mesmo ciclo. Seja um conjunto de transaes {T0,T1,T2}. Um impasse acontece quando T0 est esperando T1 liberar um lock que por sua vez est esperando T2 liberar um lock que est esperando T0 liberar um lock.

MTODOS PARA TRATAMENTO DE IMPASSE

Preveno Tempo limite de bloqueio Deteco e recuperao

Preveno

Abordagem 1: Bloqueia todos os itens de dados antes da transao Ordena os bloqueios usando protocolo em rvore

Preveno

Abordagem 2: Usa preempo e reverso Utiliza timestamp para decidir se transao espera ou revertida Bloqueio continua sendo usado para controlar concorrncia

Esquemas de preveno

Esperar-morrer(wait-die)

Se TS(Ti) < TS(Tj) Ti espera Caso contrrio, Ti "morta"

Ferir-esperar(wound-die)

Se TS(Ti) < TS(Tj) Tj "ferido" Caso contrrio, Ti espera por Tj

Tempo limite de bloqueio

Cada transao possui um tempo limite depois que pede um bloqueio. Caso esse tempo seja atingido (tempo esgotado), ela revertida e depois reiniciada. Se ocorrer um deadlock, a(s) transao(es) ter(o) seus tempos esgotados, revertendo-as e permitindo que as outras transaes possam ser completadas.

Deteco e recuperao

Manter informaes sobre os itens de dados

alocados atualmente para transaes, assim como qualquer solicitao de itens de dados pendentes; Determinar se o sistema entrou em estado de deadlock atravs de um algoritmo; Recuperar-se do impasse em caso afirmativo de deadlock

Deteco

Seja um grafo G=(V,E). Em E, cada par ordenado do tipo Ti Tj quer dizer que a transao Ti est esperando um item de dado bloqueado por Tj. Quando Tj liberar o dado que Ti precisa, o par ordenado Ti Tj retirado de E.

Deteco
Sem impasse

Com impasse
T2

T1

T3

Recuperao

Seleo de vtima Rollback Estagnao

Exemplo de deadlock no SQL Server


Transao A

BEGIN TRANSACTION
UPDATE Customer SET LastName = 'John' WHERE CustomerId=111 WAITFOR DELAY '00:00:05' -- Wait for 5 ms UPDATE Orders SET CustomerId = 1 WHERE OrderId = 221 COMMIT TRANSACTION Transao B BEGIN TRANSACTION UPDATE Orders SET ShippingId = 12 WHERE OrderId = 221 WAITFOR DELAY '00:00:05' -- Wait for 5 ms UPDATE Customer SET FirstName = 'Mike' WHERE CustomerId=111

COMMIT TRANSACTION

Operaes de Insero e Excluso

Alm de read(Q) e write(Q), devemos tomar cuidado tambm com algumas operaes adicionais que afetam no controle de concorrncia: () utilizada para inserir um novo item de dado Q em um banco de dados e lhe designa um valor inicial. () remove o item de dado Q do banco de dados.

Operaes de Insero e Excluso

Resultar em um erro lgico em transao se: Uma transao que queira operar um read(Q) depois da excluso de Q. Uma transao que pretenda realizar uma operao de read(Q) antes da insero de Q. Ao tentar remover um item de dado inexistente.

Excluso

As instrues de excluso afeta o controle de concorrncia. Essa operao de excluso entra em conflito com outra instruo. Veremos a seguir como a operao de excluso entra em conflito com as demais:

Excluso

As instrues de excluso afeta o controle de concorrncia. Essa operao de excluso entra em conflito com outra instruo. Veremos a seguir como a operao de excluso entra em conflito com as demais: Considere que Ii e Ij como sendo as instrues das transaes de Ti e Tj. Nesse caso, = e sendo vrias outras instrues.

Excluso
= (). e entram em conflito. Se vier

antes de , ter um erro lgico. Se vier antes de , poder executar a operao com sucesso. = (). e entram em conflito. Se vier antes de , ter um erro lgico. Se vier antes de , poder executar a operao com sucesso.

Excluso
= (). e entram em conflito. Se vier

antes de , ter um erro lgico. Se vier antes de , ter um erro lgico. = (). e entram em conflito. Suponha que o item de dados Q no existisse antes da execuo de e . Ento, se vier antes de , um erro lgico resultado para . Se vier antes de , ento nenhum erro lgico resultar. De modo semelhante, se Q existisse antes da execuo de e , ento um erro lgico resultante se vier antes de , mas no de outra forma.

Excluso
? Quando uma operao de excluso entra em conflito com outras? Se uma transao quiser ler o item que a outra removeu; Se uma transao quiser escrever o que a outra removeu;

Excluso
? Quando uma operao de excluso entra em conflito com outras? Se uma transao quiser remover o que a outra removeu; Se uma transao quer remover e outra inserir: A remoo s pode ser feita se a insero j ocorreu ou se o dado j existia. A insero s deve ocorrer se o dado no existe.

Excluso
Se o bloqueio em duas fases for usado, preciso

um bloqueio exclusivo sobre o item de dados antes que ele possa ser removido. Para o protocolo timestamp preciso um controle similar ao usado para o write.

Insero
O que voc j viu e aprendeu anteriormente? Que a operao de () entra em conflito com as seguintes operaes: (); ; ();

Insero
O que voc j viu e aprendeu anteriormente? Que a operao de () entra em conflito com as seguintes operaes: (); ; (); Nenhum item de dado pode ser removido, lido ou alterado antes de existir no sistema. Por existirem esses conflitos, a operao () tratada como uma operao de () dentro do sistema.

Insero
O que voc j viu e aprendeu anteriormente? Por existirem esses conflitos, a operao () tratada como uma operao de () dentro do sistema. Para fins de controle de concorrncia temos que: No protocolo de bloqueio, insert(Q) impe bloqueio exclusivo sobre o tem Q. No protocolo de ordenao por Timestamp, se insert(Q) for executada, R-timestamp e Wtimestamp do tem Q so atualizados.

Você também pode gostar