Escolar Documentos
Profissional Documentos
Cultura Documentos
transações
Banco de Dados II
Transação
begin transaction
<operações>
end transaction
Atomicidade
Consistência
Isolamento
Durabilidade
Propriedades de transação (ACID)
Ti : read (A);
A := A - 50;
write (A);
read (B);
B := B + 50;
write (B);
Propriedade – Atomicidade
Exemplo:
Se os valores de A e B forem 1.000 e 2.000,
respectivamente, antes da execução de Ti.
A transação começou a ser executada e ocorreu uma
falha depois da execução da operação write (A), mas
antes da operação write (B)
Os valores de A e B são 950 e 2.000, estando portanto,
inconsistentes.
O sistema deve garantir que o estado de
consistência seja restabelecida.
Propriedade – Consistência
Exemplo:
Durante Ti, o BD fica temporariamente
inconsistente - após write (A) e antes de write (B).
Se uma segunda transação, em execução
concorrente, ler A e B obterá valores
inconsistentes (950 e 2000). Se executar
atualizações baseadas nesses valores, o banco
de dados permanecerá inconsistente mesmo
após a execução das transações.
Propriedade – Durabilidade
Ativa
Imediatamente após o início da execução
A transação permanece neste estado enquanto está
em execução
Efetivação parcial
Após a execução da última instrução
Efetivada
Após ser completada com sucesso
Estados da transação
Falha
Após a descoberta que a execução normal não
pode ser realizada
Abortada
Após a transação ter sido cancelada e o banco de
dados restaurado a seu estado anterior ao início da
transação.
Duas opções:
Reiniciar a transação – apenas se não ocorrer erro
lógico interno
Matar a transação
Exemplo de transação
Serial
Plano de execução
Intercalado
Problemas na Concorrência
Atualização perdida
(sobrescrita)
Problemas na concorrência
T1 falha e T2 lê o valor
´temporário”
incorreto de x
Falha
Problemas na concorrência
T3 lê x depois da
subtração de N e lê y
antes da adição de N
(resumo errado)
Execuções Concorrentes
Transações Concorrentes:
Pode causar inconsistência do BD
Implementação complexa
O paralelismo entre CPU e I/O pode ser explorado
para executar diversas transações em paralelo
Aumento da utilização do disco e do processador –
enquanto uma transação está utilizando a CPU, outra
transação pode estar lendo ou escrevendo no disco
Execuções Concorrentes
Transações Concorrentes
Mistura de transações em execução simultânea
(longas e curtas)
Sequencial - transação deve esperar até que uma
transação longa se complete, gerando atrasos
imprevisíveis em sua execução.
Concorrentes - compartilham os ciclos de CPU e
os acessos a disco entre si, redução de atrasos e
do tempo médio de resposta.
Execuções Concorrentes
T1 (transfere R$ 50,00 da conta A para a conta B)
T2 (transfere 10% do saldo da conta A para a conta B)
Execuções Concorrentes
T1 T2
Suponha A=1.000 e B=2.000
read (A);
Escala 1 - uma escala A := A - 50;
(schedule) sequencial na qual write (A);
read (B);
T1 é seguido por T2
B := B + 50;
write (B);
read (A);
temp := A * 0,1;
A := A - temp;
write (A);
read (B);
B := B + temp;
write (B);
Execuções Concorrentes
T1 T2
Escala 2 - uma escala de
read (A);
execução sequencial na qual temp := A * 0,1;
T2 é seguido por T1 A := A - temp;
Em ambos os casos - write (A);
read (B);
preservação da soma A + B B := B + temp;
write (B);
read (A);
A := A - 50;
write (A);
read (B);
B := B + 50;
write (B);
Execuções Concorrentes
T1 T2
Escala 3 - uma escala de read (A);
execução concorrente A := A - 50;
equivalente à Escala 1 write (A);
read (A);
Preservação da soma A + B
temp := A * 0,1;
A := A - temp;
write (A);
read (B);
B := B + 50;
write (B);
read (B);
B := B + temp;
write (B);
Execuções Concorrentes
T1 T2
Escala 4 - uma escala de
read (A);
execução concorrente A := A - 50;
Estado inconsistente 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);
Serialização (Seriação)
Considere
Uma escala de execução S
Duas instruções sucessivas Ii e Ij, das transações Ti e Tj
(i <> j)
Se Ii e Ij referem-se a itens de dados diferentes, então
Ii e Ij podem ser alternados sem afetar os resultados
de qualquer instrução de S
Serialização de conflito
T1 T2 T1 T2
read(A) read(A)
write(A) write(A)
read(A) read(A)
write(A) read(B)
read(B) write(A)
write(B) write(B)
read(B) read(B)
write(B) write(B)
Serialização de Conflito
T1 T2 T1 T2
read(A) read(A)
write(A) write(A)
read(B) read(B)
read(A) read(A)
write(A) write(B)
write(B) write(A)
read(B) read(B)
write(B) write(B)
Serialização de Conflito
Algoritmo:
Para cada transação Ti da escala S, criar um nó Ti no grafo
Para cada caso em S que Tj executar um read(x) depois que
Ti executar um write(x), criar uma seta (Ti → Tj) no grafo
Para cada caso em S que Tj executar um write(x) depois que
Ti executar um read(x), criar uma seta (Ti → Tj) no grafo
Para cada caso em S que Tj executar um write(x) depois que
Ti executar um write(x), criar uma seta (Ti → Tj) no grafo
S será conflito serializável se, e somente se, o grafo não
contiver ciclo.
Teste de Serialização de Conflito
Teste de Serialização de Conflito
Teste de Serialização de Conflito
T3 T4 T6
read (Q)
write (Q)
write (Q)
write (Q)
Recuperação
T8 T9
read(A)
write(A)
read(A)
read(B)
Recuperação
T8 T9
read(A)
write(A)
read(A)
read(B)
Recuperação em cascata