Você está na página 1de 12

Sumrio

1 Processamento de Consultas 2 Introduo a Transaes 3 Recuperao de Falhas 4 Controle de Concorrncia 5 SQL Embutida 6 Banco de Dados Distribudo

Controle de Concorrncia
SGBD
sistema multiusurio em geral
diversas transaes executando simultaneamente

Garantia de isolamento de Transaes


1a soluo: uma transao executa por vez
escalonamento serial de transaes soluo bastante ineficiente!
vrias transaes podem esperar muito tempo para serem executadas CPU pode ficar muito tempo ociosa enquanto uma transao faz I/O, por exemplo, outras transaes poderiam ser executadas

Controle de Concorrncia
Soluo mais eficiente
execuo concorrente de transaes de modo a preservar o isolamento
escalonamento (schedule) no-serial e ntegro

responsabilidade do subsistema de controle de concorrncia ou scheduler


T1 read(X) X = X 20 write(X) Y = Y + 20 write(Y) read(X) X = X + 10 write(X) read(Y) Y = Y + 20 write(Y) T2 T1 read(X) X = X 20 T2

execuo read(Y) serial

execuo write(X) no-serial ou concorrente

read(X) X = X + 10 write(X)

Scheduler
Responsvel pela definio de escalonamentos no-seriais de transaes Um escalonamento E define uma ordem de execuo das operaes de vrias transaes, sendo que a ordem das operaes de uma transao Tx em E aparece na mesma ordem na qual elas ocorrem isoladamente em Tx Problemas de um escalonamento no-serial mal definido (invlido)
atualizao perdida (lost-update) leitura suja (dirty-read)

Atualizao Perdida
Uma transao Ty grava em um dado atualizado por uma transao Tx
T1 read(X) X = X 20 read(Z) X = Z + 10 write(X) read(Y) write(X) Y = X + 30 write(Y) a atualizao de X por T1 foi perdida! T2

Leitura Suja
Tx atualiza um dado X, outras transaes posteriormente lem X, e depois Tx falha
T1 read(X) X = X 20 write(X) read(X) X = X + 10 write(X) read(Y) abort( ) T2 leu um valor de X que no ser mais vlido! T2

Scheduler
Deve evitar escalonamentos invlidos
exige anlise de operaes em conflito
operaes que pertencem a transaes diferentes transaes acessam o mesmo dado pelo menos uma das operaes write

tabela de situaes de conflito de transaes


podem gerar um estado inconsistente no BD
Ty read(X) Tx read(X) write(X) write(X)

Scheduler X Recovery
Scheduler deve cooperar com o Recovery! Categorias de escalonamentos considerando o grau de cooperao com o Recovery
recuperveis X no-recuperveis permitem aborto em cascata X evitam aborto em cascata estritos X no-estritos

Escalonamento Recupervel
Garante que, se Tx realizou commit, Tx no ir sofrer UNDO
o recovery espera sempre esse tipo de escalonamento!
garantia de Durabilidade!

Um escalonamento E recupervel se nenhuma Tx em E for concluda at que todas as transaes que gravaram dados lidos por Tx tenham sido concludas
T1 read(X) X = X 20 write(X) read(X) X = X + 10 write(X) commit( ) abort( ) commit( ) commit( ) T2 T1 read(X) X = X 20 write(X) read(X) X = X + 10 write(X) T2

escalonamento no-recupervel

escalonamento recupervel

Escalonamento sem Aborto em Cascata


Um escalonamento recupervel pode gerar abortos de transaes em cascata
consome muito tempo de recovery!

Um escalonamento E recupervel e evita aborto em cascata se uma Tx em E s puder ler dados que tenham sido atualizados por transaes que j concluram
Evita dirty-read!
T1 read(X) X = X 20 write(X) read(X) X = X + 10 write(X) abort( ) ... T2 T1 read(X) X = X 20 write(X) T2

escalonamento recupervel com aborto em cascata

escalonamento commit( ) recupervel sem aborto em cascata

read(X) X = X + 10 write(X) ...

Escalonamento Estrito
Garante que, se Tx deve sofrer UNDO, basta gravar a before image dos dados atualizados por ela
UNDO(Tx) no interferir em atualizaes posteriores de outras transaes
Evita lost-update!

Um escalonamento E recupervel, evita aborto em cascata e estrito se uma Tx em E s puder ler ou atualizar um dado X depois que todas as transaes que atualizaram X tenham sido concludas
T1 read(X) X = X 20 write(X) read(Y) X = Y + 10 write(X) commit( ) abort( ) T2 T1 read(X) X = X 20 write(X) T2

escalonamento recupervel sem aborto em cascata e no-estrito

escalonamento commit( ) recupervel sem aborto em cascata e estrito

read(Y) X = Y + 10 write(X) commit( )

Teoria da Serializabilidade
Garantia de escalonamentos no-seriais vlidos Premissa
um escalonamento no-serial de um conjunto de transaes deve produzir resultado equivalente a alguma execuo serial destas transaes
entrada: T1 X = 50 read(X) Y = 40 execuo read(Y) serial
T2

X = X 20 write(X) Y = Y + 20 write(Y) read(X) X = X + 10 write(X)

entrada: T1 X = 50 read(X) Y = 40

T2

X = X 20 read(X) X = X + 10 write(X)

execuo write(X) no-serial serializvel


read(Y)

sada: X = 40 Y = 60

sada: X = 40 Y = Y + 20 Y = 60 write(Y)

Verificao de Serializabilidade
Duas principais tcnicas
equivalncia de conflito equivalncia de viso

Equivalncia de Conflito
dado um escalonamento no-serial E para um conjunto de Transaes T, E serializvel em conflito se E for equivalente em conflito a algum escalonamento serial E para T, ou seja, a ordem de quaisquer 2 operaes em conflito a mesma em E e E.

Equivalncia de Conflito - Exemplo


escalonamento serial E
T1 read(X) X = X 20 write(X) read(Y) Y = Y + 20 write(Y) read(X) X = X + 10 write(X) read(Y) Y = Y + 20 write(Y) Y = Y + 20 write(Y) T2

escalonamento no-serial E1 escalonamento no-serial E2


T1 read(X) X = X 20 write(X) read(X) X = X + 10 write(X) write(X) read(Y) write(X) T2 T1 read(X) X = X 20 read(X) X = X + 10 T2

E1 equivale em conflito a E E2 no equivale em conflito a nenhum escalonamento serial para T1 e T2 E1 serializvel e E2 no serializvel

Verificao de Equivalncia em Conflito


Construo de um grafo direcionado de precedncia
nodos so IDs de transaes arestas rotuladas so definidas entre 2 transaes T1 e T2 se existirem operaes em conflito entre elas
direo indica a ordem de precedncia da operao
origem indica onde ocorre primeiro a operao

Um grafo com ciclos indica um escalonamento no-serializvel em conflito!

Grafo de Precedncia
escalonamento serializvel E1
T1 read(X) X = X 20 write(X) read(X) X = X + 10 write(X) read(Y) Y = Y + 20 write(Y) Y = Y + 20 write(Y) write(X) read(Y) write(X) T2

escalonamento no-serializvel E2
T1 read(X) X = X 20 read(X) X = X + 10 T2

T1

T2

T1

T2

Relao entre Escalonamentos


SR = escalonamento serializvel R = escalonamento recupervel SAC = escalonamento sem aborto em cascata E = escalonamento estrito S = escalonamento serial

E SAC R

SR

Histria
Representao seqencial da execuo entrelaada de um conjunto de transaes escalonamento no-serializvel E2 concorrentes
operaes consideradas
read (r), write (w), commit (c), abort (a)
T1 read(X) X = X 20 read(X) X = X + 10 write(X) read(Y) write(X) Y = Y + 20 write(Y) commit( ) commit( ) T2

Exemplo
HE2 = r1(x) r2(x) w1(x) w2(x) w1(y) c1 c2

Exerccio 1
1. Dadas as transaes abaixo, associe corretamente a histria com o tipo de escalonamento (SR, R, SAC, E, S) T1 = w(x) w(y) w(z) c1 T2 = r(u) w(x) r(y) w(y) c2 ( ( ( ( ( ) ) ) ) )

HE1 = w1(x) w1(y) r2(u) w2(x) r2(y) w2(y) c2 w1(z) c1 HE2 = w1(x) w1(y) w1(z) c1 r2(u) w2(x) r2(y) w2(y) c2 HE3 = w1(x) w1(y) r2(u) w2(x) w1(z) c1 r2(y) w2(y) c2 HE4 = w1(x) w1(y) r2(u) w1(z) c1 w2(x) r2(y) w2(y) c2 HE5 = w1(x) w1(y) r2(u) w2(x) r2(y) w2(y) w1(z) c1 c2 2. Dadas as transaes ao lado, d um exemplo de uma histria no-serial: a) no-serializvel b) serializvel e no-recupervel c) sem aborto em cascata

T1 read(X) X = X + 10 write(X) Y = Y + 20 write(Y)

T2 read(X) Y = X + 10 write(Y) T3 read(X) X=X*2 write(X)

Equivalncia de Viso
dado um escalonamento no-serial E para um conjunto de Transaes T, E serializvel em viso se E for equivalente em viso a algum escalonamento serial E para T, ou seja:
para toda operao read(X) de uma Tx em E, se X lido aps um write(X) de uma Ty em E (ou originalmente lido do BD), ento essa mesma seqncia deve ocorrer em E; se uma operao write(X) de uma Tk for a ltima operao a atualizar X em E, ento Tk tambm deve ser a ltima transao a atualizar X em E.

10

Serializabilidade de Viso
Idia bsica
enquanto cada read(X) de uma Tx ler o resultado de uma mesmo write(X) em E e E, em ambos os escalonamentos, Tx tem a mesma viso do resultado se o ltimo write(X) feito pela mesma transao em E e E, ento o estado final do BD ser o mesmo em ambos os escalonamentos

Exemplo
Hserial = r1(X) w1(X) c1 w2(X) c2 w3(X) c3 Hexemplo = r1(X) w2(X) w1(X) w3(X) c1 c2 c3 Hexemplo no serializvel em conflito, mas serializvel em viso

Serializabilidade em Conflito e de Viso


A serializabilidade de viso menos restritiva que a serializabilidade em conflito
um escalonamento E serializvel em conflito tambm serializvel em viso, porm o contrrio nem sempre verdadeiro

A serializabilidade de viso muito mais complexa de verificar que a serializabilidade em conflito


requer um rastreamento constante da ordem de execuo de reads e writes para cada dado
difcil a sua utilizao na prtica...

11

Verificao de Serializabilidade
Tcnicas propostas (em conflito e de viso) so difceis de serem testadas
exige que se tenha um conjunto fechado de transaes para fins de verificao

Na prtica
conjunto de transaes executando concorrentemente muito dinmico!
novas transaes esto sendo constantemente submetidas ao SGBD para execuo

logo, a serializabilidade garantida atravs de tcnicas (ou protocolos) de controle de concorrncia que no precisam testar os escalonamentos

12