UNDB
BANCO DE DADOS II
Prof. Alessandro Gonçalves
[email protected]
1
Esquemas de Seriação
Ajustar o schedule
Garantir a consistência
Como gerenciar a ordem de execução ?
2
Equivalências de Seriação
Seriação de conflito
Seriação de visão
3
Equivalência de Seriação
S1
Estado
A
S2
Estado
B
S3
= CONSISTÊNCIA
4
Execuções simultâneas
T1
read(A);
A := A -50;
Write (A);
Read (B);
B := B + 50;
Write (B);
T2
read(A);
Temp := A*0.1
A := A – temp;
Write (A);
Read (B);
B := B + temp;
Write (B);
5
Execuções simultâneas
T1
T2
read(A);
A := A -50;
read(A);
temp := A*0.1
A := A – temp;
Write (A);
Read (B);
Write (A);
Read (B);
B := B + 50;
Write (B);
B := B + temp;
Write (B);
6
Seriação de conflito
Considerando somente instruções Read e Write
Um schedule com 02 instruções consecutivas Ii e Ij, de
transações Ti e Tj
Se referirem a diferentes tipos de dados → não importa
Se forem relativos ao mesmo dado, importa
7
Seriação de conflito
Quatro situações possíveis
Situação 1:
Ii = read(Q), Ij = read(Q)
A ordem importa ?
NÃO
8
Seriação de conflito
Situação 2:
Ii = read(Q), Ij = write(Q)
Se Ii vem antes de lj então Ti não lê o valor de Q que é
escrito por Tj na instrução Ij. Se Ij vem antes de Ii, então
Ti lê o valor de Q que é escrito por Tj. Assim, a ordem
de Ii e Ij importa.
9
Seriação de conflito
Situação 3:
Ii = write(Q), Ij = read(Q)
Similar à situação 2. Assim, a ordem de Ii e Ij importa.
10
Seriação de conflito
Situação 4:
Ii = write(Q), Ij = write(Q)
Como as duas instruções são “write”, a ordem não afeta Tj ou
Tj . Contudo, o valor obtido pela próxima instrução read(Q) de
S é afetada, pois o resultado apenas da última instrução Write
é preservado no banco de dados. Se não houver outra
instrução write(Q) após Ii e Ij em S, então a ordem de Ii e Ij
afeta diretamente o valor final de Q no estado do banco de
dados que resulta do schedule S.
11
Seriação de conflito
Definição de conflito na seriação
Ii e Ij conflitam se forem operações em diferentes
transações sobre o mesmo item de dados e pelo
menos uma dessas operações for uma operação write.
12
Seriação de conflito - exemplos
Folhas anexas – 03 schedules
13
Seriação de conflito
Se um schedule S puder ser transformado em
um schedule S' por trocas de instruções não
conflitantes, dizemos que S e S' são
Equivalentes em Conflito.
14
Seriação de conflito
Se um schedule S é Equivalente em Conflito a um
schedule serial, este é Serial de Conflito.
15
Seriação de conflito
Resultados iguais significam schedules com
equivalência de conflito ?
16
Seriação de conflito
Anexo – schedule final
17
Seriação de visão
A seriação de conflito é boa mas muito rigorosa.
A seriação de visão é menos rigorosa que a
seriação de conflito
Baseia-se também em Read e Write
18
Seriação de visão
Um schedule S será serial de visão de um S’ se:
1.Para cada item de dados Q se a transação Ti ler
o valor inicial do schedule S, então a transação Ti
no schedule S’ deverá ler Q também.
19
Seriação de visão
2. Para cada item de dados Q se a transação Ti
executar Read(Q) no schedule S, e se esse
valor foi produzido por uma operação write(Q)
executada pela transação Tj então a operação
Read(Q) da transação Ti no schedule S’
também precisa ler o valor de Q que foi
produzido pela mesma operação Write(Q) de
Tj.
20
Seriação de visão
3. Para cada item de dados Q, a transação que
realiza write(Q) final (se houver) no schedule S
precisa realizar a operação write(Q) final no
schedule S’
21
Seriação de visão
Considere o Schedule S
T1
read(Q)
write(Q)
T2
T3
write(Q)
write(Q)
22
Seriação de visão
Considere o Schedule S’
T1
read(Q)
T2
T3
write(Q)
write(Q)
write(Q)
23
Seriação de visão
É Equivalente em Conflito ?
NÃO
É Serial em Conflito ?
NÃO
É Equivalente em Visão ?
SIM
É serial de Visão ?
SIM
24
Seriação de conflito x visão
Equivalente em conflito
Serial de
conflito
25
Seriação de conflito x visão
Equivalente em visão
Serial de
visão
26
Seriação de conflito x visão
Serial de visão
Serial
de
conflito
27
Falhas
Schedules garantem consistência
equivalência conflito ou visão
E em caso de falhas ?
28
Falhas – garantia de atomicidade
Se T9 for confirmada e houver falha em T8 ?
Quais os problemas ?
= Schedule NÃO RECUPERÁVEL
29
Schedule Recuperável
Definição
Se houver duas transações Ti e TJ e
Tj leia um item de dados previamente escrito por
Ti, a operação commit de Ti apareça antes do
commit de Tj
30
Schedule Recuperável
Um schedule recuperável é suficiente para
garantir atomicidade.
Mas e a performance ?
31
Schedule não em cascata
T1
read(A)
read(B)
write(A)
T2
T3
read(A)
write(A)
read(A)
Se ocorrer falha em read(A) de T3 ?
32
Resumindo
Schedules devem ser seriais de conflito ou de
visão
Devem ser recuperáveis
Não em cascata
33
Controle de concorrência
Para garantir que o esquema gera schedules
passíveis de seriação
Utiliza Testes de seriação
34
Testando a seriação de conflito
Constroi-se o gráfico de precedência
Gráfico é um par G(V, A) – vértices e arestas
Transações formam os vértices
Ligações entre as transações formam as arestas
T1
T2
35
Testando a seriação de conflito
Regras para ser uma aresta:
Ti executa read(Q) antes Tj executar write(Q)
Ti executa write(Q) antes Tj executar read(Q)
Ti executa write(Q) antes Tj executar write(Q)
36
Gráfico de precedência
T1
T2
read (A)
write (A)
read (B)
Write (B)
read (A)
write (A)
read (B)
write (B)
Como seria o gráfico de precedência ?
37
Gráfico de precedência
T1
T2
read (A)
read (A)
write (A)
read (B)
write (A)
read (B)
write (B)
write (B)
Como seria o gráfico de precedência ?
38
Gráfico de precedência
T1
T2
T3
read (A)
read (A)
write (A)
read (A)
write (A)
read (A)
read (B)
write (B)
write (B)
Como seria o gráfico de precedência ?
39
Gráfico de precedência
O gráfico do schedule do slide anterior fica assim:
T3
T1
T2
Forma ciclo !
40
Classificação topológica
41
Gráfico de precedência - final
Se formar ciclo, NÃO É SERIAL DE CONFLITO
Se não formar ciclo, É SERIAL DE CONFLITO
42
Controle de concorrência
43
Controle de concorrência
Bloqueios de itens de dados
Compartilhado – posso ler mas não escrever
Exclusivo – posso ler e escrever
Ex: bloqueei os registros de clientes para escrita.
Mas os registros de vendas, fornecedores...
Continuam livres
44
Controle de concorrência
Matriz de compatibilidade de bloqueios
Compartilhado
Exclusivo
Compartilhado
Verdadeiro
Falso
Exclusivo
Falso
Falso
45
Controle de concorrência
Quais bloqueios são gerados por:
Insert ?
Select ?
Update
Delete ?
46
Os 3 problemas da concorrência
Problema 1 – Atualização perdida
Exemplo do bônus de 10%
T1
read(A)
A = A * 1.1
T2
read(A)
A = A * 1.1
write(A)
write(A)
47
Os 3 problemas da concorrência
Problema 2 – Dependência sem commit
T1
T2
write (A)
read(A)
rollback
Ler ou escrever valores antes de COMMIT
48
Os 3 problemas da concorrência
Problema 3 – Análise inconsistente
T1
read(A)
read(B)
T2
read(C)
write(C) -> 20
read(A)
write(B) -> 50 (qual bloqueio ?)
commit
read(C)
commit
espera
espera
Originais: 40,50,30
Quanto vale (A+B+C) em cada momento
49
Controle de concorrência
O bloqueio
é
compatível
?
Não, aguarde...
Sim
Bloqueie (lock)
Execute o
comando
Libere (unlock)
50
Exemplo da conta
Anexo Bl.02 – serial
Como se comporta ?
51
Exemplo da conta – com
desbloqueio ao final de cada T
T3
lock-E(B)
read(B)
B := B – 50;
write(B)
lock-E(A)
read(A)
A:= A+ 50;
write(A)
unlock (B)
Unlock (A)
T4
lock-C(A)
read(A)
lock-C(B)
read(B)
display(A+B)
unlock(A)
unlock(B)
52
Problema de bloqueio - impasse
T3
lock-E(B)
read(B)
B := B – 50;
write(B)
T4
lock-C(A)
read(A)
lock-C(B)
read(B)
lock-E(A)
write(A)
53
Problema – impasse (deadlock)
Analise
1) É preferível estado inconsistente ou Deadlock ?
2) O que o SGBD deve fazer ao detectar ?
54
Problema – starving
Demora excessiva para executar a transação
O sistema não está em Deadlock mas demora para
conceder o bloqueio da transação
55
Problema – timeout
xx-x
Banco de dados tem um tempo limite de resposta
O sistema extrapola este tempo para conceder o bloqueio da
transação
T1
Begin trans
While not eof(cliente)
Update conta set saldo = saldo - 10
Where agencia.nome = 'Renascença' and cliente.codigo =
cliente
Loop
Commit
T2
Select saldo from conta, agencia where agencia.nome =
'Renascença' and conta.agencia = agencia.agencia
56
Problema – starving e timeout
Dicas para minimizar o problema
1. Chaves primárias pequenas (nome x código)
2. Operação através de índices (análise das queries)
3. Diminuir o bloco de comandos por transação,
executando Commits de tempos em tempos
4. Uso de Views e Views Materializadas
5. Programação dentro do banco
57
Protocolos de bloqueio
Conjunto de regras que as transações devem seguir
Restringem o número de schedules possíveis
Só estudaremos os protocolos que gerem schedules
passíveis de seriação de conflito
58
Protocolos de bloqueio
Considerações
Ti e Tj são transações de um schedule S, onde
Ti → Tj (Ti vem antes de Tj) e;
Ti usou o bloqueio “A” sobre Q
Tj usou o bloqueio “B” sobre Q
Compatibilidade(A,B) = falso
Assim, para qualquer schedule gerado a partir de S,
Ti virá antes de Tj
59
Protocolos de bloqueio
Considerações
Ti
lock-C(A)
Select nome
from cliente
Where Codigo = 1
unlock(A)
Tj
lock-E(A)
Update cliente
Set nome = 'Angelina'
Where
Codigo = 1
unlock(A)
60
Protocolos de bloqueio
Considerações
Um schedule S é legal para o protocolo se:
For possível para um conjunto de transações que
seguem as regras do protocolo do bloqueio
Protocolo de bloqueio assegura a seriação de
conflito se e somente se todos os schedules legais
forem passíveis de seriação de conflito.
Ou seja: para todos os schedules legais, a relação é
acíclica...
61
Concessão de bloqueios
T1
T2
T3
T4
lock-C(A)
lock-E(A)
lock-C(A)
lock-C(A)
...
62
Concessão de bloqueios
STATUS
1. Item A pode ser bloqueado compartilhado por T1
?
2. Item A Bloqueado por T1
3. Item A pode ser bloqueado exclusivamente por
T2 ?
4. Não. T2 entra em estado de espera
63
Concessão de bloqueios
STATUS
5. Item A pode ser bloqueado compartilhado POR
T3 ?
6. Item A bloqueado compartilhado por T3.
Operação de T3 feita.
7. Item A bloqueado compartilhado por T4.
Como ficou a transação T2 ?
64
Concessão – evitando starving
Quando Ti solicita um bloqueio sobre item de
dados Q em um modo específico M, o gerenciador
de controle de concorrência concede o bloqueio
desde que:
Não haja outra transação mantendo um bloqueio
sobre Q em um modo conflitante com M
Não exista outra transação que esteja esperando
um bloqueio sobre Q e que fez sua solicitação de
bloqueio antes de Ti
65
Protocolos de bloqueio
66
Protocolo de bloqueio em 2 fases
Assegura a seriação
1. Fase de crescimento – uma transação pode
obter bloqueios, mas não liberá-los (ponto de
bloqueio)
2. Fase de encolhimento – uma transação pode
liberar bloqueios, mas não obter novos bloqueios
Exemplo a seguir
67
Exemplo de bloqueio em 2 fases
T1
T2
lock-E(B)
read(B)
B := B -50
write (B)
lock-C (A)
read (A)
lock-C (B)
lock-E(A)
unlock(A)
unlock(B)
68
Outro exemplo
T1
T2
lock-C(A)
read(A)
lock-C(B)
read (B)
unlock(A)
unlock(B)
lock-E(B)
write(B)
unlock(B)
69
Bloqueio em 2 fases
Características
Asseguram a seriação ?
Sim
Previnem deadlock ?
Não
Previnem rollback em cascata ?
Não
Exemplo rollback em cascata a ser escrito
(anexo)
70
Bloqueio em 2 fases
Comum – segue o protocolo
Estrito – o bloqueio EXCLUSIVO é mantido até a
confirmação (Commit).
Rigoroso – TODOS os bloqueios são mantidos
até a confirmação (Commit)
Qual deles é implantado pela maioria dos SGBD ?
RIGOROSO
71
Bloqueio – o problema dos locks
sobrepostos
Uma transação Ti como abaixo:
Lock-C(A)
Read(A)
Lock-E(A)
Write(A)
O que acontece ?
72
Bloqueio – o problema dos locks
sobrepostos
Se uma transação Ti tiver o bloqueio
compartilhado em Q, pode solicitar bloqueio
exclusivo de Q
UPGRADE
Desde que seja na fase de crescimento do
bloqueio de duas fases
73
Bloqueio – o problema dos locks
sobrepostos
Se uma transação Ti tiver o bloqueio exclusivo
em Q, pode solicitar bloqueio compartilhado de Q
DOWNGRADE
Desde que seja na fase de encolhimento do
bloqueio de duas fases
74
O problema dos locks sobrepostos
Upgrade x Downgrade
T1
lock-C(A)
read(A)
lock-E(A)
unlock(A)
T2
lock-C(B)
read(B)
lock-C(A)
read(A)
lock-E(A)
write(A)
unlock(B)
lock-C(A)
75
UNDB
BANCO DE DADOS II
Prof. Alessandro Gonçalves
[email protected]
76
Download

Banco de Dados II – aulas bloco 2