Você está na página 1de 23

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

T2

T1

read(X)

read(X)

X = X 20

X = X 20

write(X)

execuo write(X)
no-serial
ou concorrente

execuo
read(Y)
serial

Y = Y + 20
write(Y)

T2

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

read(X)

read(Y)

X = X + 10

Y = Y + 20

write(X)

write(Y)

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

T2

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!

Leitura Suja
Tx atualiza um dado X, outras transaes
posteriormente lem X, e depois Tx falha
T1

T2

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!

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!

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

escalonamento
no-recupervel

T2

T1

read(X)

read(X)

X = X 20

X = X 20

write(X)

write(X)

read(X)
X = X + 10

escalonamento
recupervel

read(X)
X = X + 10

write(X)
commit( )
abort( )

T2

write(X)
commit( )
commit( )

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
T1

escalonamento
recupervel
com aborto em
cascata

T2

T1

read(X)

read(X)

X = X 20

X = X 20

write(X)

write(X)

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

...

escalonamento
commit( )
recupervel
sem aborto em
cascata

T2

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
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

escalonamento
recupervel
sem aborto em
cascata e
no-estrito

T2

T1

read(X)

read(X)

X = X 20

X = X 20

write(X)

write(X)

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

escalonamento
commit( )
recupervel
sem aborto em
cascata e
estrito

T2

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

T2

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

X = X 20

X = X 20

execuo write(X)
no-serial
serializvel

write(X)

execuo
read(Y)
serial

Y = Y + 20

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

write(Y)

sada:
X = 40
Y = 60

T2

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

read(Y)

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

T2

escalonamento no-serial E1
T1

T2

escalonamento no-serial E2
T1

read(X)

read(X)

read(X)

X = X 20

X = X 20

X = X 20

write(X)

write(X)

T2

read(X)

read(Y)

read(X)

Y = Y + 20

X = X + 10

write(X)

write(Y)

write(X)

read(Y)

X = X + 10

read(X)

read(Y)

X = X + 10

Y = Y + 20

Y = Y + 20

write(X)

write(Y)

write(Y)

write(X)

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

T2

escalonamento no-serializvel E2
T1

read(X)

read(X)

X = X 20

X = X 20

write(X)

read(X)
read(X)

X = X + 10

X = X + 10

write(X)

write(X)

read(Y)

read(Y)

write(X)

Y = Y + 20

Y = Y + 20

write(Y)

write(Y)

T1

T2

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

T2

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

Exemplo

write(X)

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

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

Exerccios 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:
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.

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
problema NP-completo!
difcil a sua utilizao na prtica...

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

Você também pode gostar