bases de dados 2013/2014 transações - técnico lisboa · • a soma a+b tem de ser igual antes e...
TRANSCRIPT
11/20/13
1
Bases de Dados 2013/2014 Transações
Helena Galhardas
Sumário!• Conceito de Transação!
– Propriedades ACID!• Conflitos e Serializabilidade!• Recuperabilidade!• Protocolos de controlo de concorrência!• Transações em SQL!• Recuperação de falhas!
© 2013 Técnico Lisboa
11/20/13
2
Referências
• Raghu Ramakrishnan, Database Management Systems, 3ª edição: Cap 16
© 2013 Técnico Lisboa
Transacção (1) Conjunto de operações de um programa que formam uma unidade lógica de trabalho na qual podem ser acedidos e atualizados vários dados, por exemplo:
– Transferir dinheiro da conta bancária A para a B: 1. !read(A)!!! !2.!A := A – 50!!! !3.!write(A)!!! !4.!read(B)!!! !5.!B := B + 50!!! !6.!write(B)!
– Reservar uma viagem, etc Transacção é a visão abstracta que o SGBD tem de um
programa de utilizador: sequência de leituras e escritas © 2013 Técnico Lisboa
11/20/13
3
Transacção (2) • Lista de acções ou instruções
– leituras ou escritas sobre objectos da BD – commit se a transacção termina com sucesso
(por omissão, supõe-se que a transacção termina com sucesso na última instrução)
– abort ou rollback se a transacção não termina e todas as suas ações têm que ser anuladas
• Assume-se que : – Transacções interagem umas com as outras só
através de operações de leituras e escritas da BD – Uma BD é uma colecção fixa de objectos
independentes
© 2013 Técnico Lisboa
Visão Simplificada das Transacções
• Só consideramos as instruções de leitura e escrita na análise
© 2012 Técnico Lisboa
3
11/20/13
4
Motivação para a concorrência • Execução concorrente de programas é
essencial para um bom desempenho da BD – Enquanto uma transacção espera que uma página
seja lida do disco, o CPU pode processar outra transacção
– Intercalar as actividades de E/S e de CPU reduz o tempo que os discos e processador estão inactivos
• aumenta o desempenho do sistema de BD (em nº transações/unid. tempo)
• reduz o tempo médio de resposta das transações: as curtas não precisam de esperar pelas longas.
© 2013 Técnico Lisboa
Transacções e Concorrência A forma mais fácil de garantir que 2 transações não interferem seria executá-las em série...mas: • pequenas transações
teriam de esperar pela conclusão de transações mais demoradas
• Transações que não entram em conflito seriam obrigadas a esperar desnecessariamente
T1 T2read (A)A := A – 50write (A)read (B)B := B + 50write (B)commit
read (A)temp := A * 0.1A := A tempwrite (A)read (B)B := B + tempwrite (B)commit
© 2013 Técnico Lisboa
11/20/13
5
Concorrência num SGBD
• Concorrência é conseguida pelo SGBD intercalando acções (leituras e escritas de objectos da BD) de várias transacções
• Cada transacção tem de deixar a BD num estado consistente se ela estiver consistente quando a transacção se iniciar – o SGBD não compreende a semântica da
transacção
© 2013 Técnico Lisboa
Propriedades ACID
• Atomicidade • se a transação falhar entre os
passos 4–6, os passos 1–3 ficam sem efeito
• Coerência • a soma A+B tem de ser igual antes e depois
• Isolamento • nenhuma outra operação deve ler os valores de A e B entre os
passos 3 e 6 (verá um valor inconsistente)
• Durabilidade • se a transação termina com sucesso, as alterações são
definitivas, mesmo que o hw ou sw falhem © 2012 Técnico Lisboa
Ti : read(A) A := A – 50 write(A) read(B) B := B + 50 write(B)
1 2 3 4 5 6
© 2013 Técnico Lisboa
11/20/13
6
[A] Atomicidade • Numa transacção, as alterações ao estado são
atómicas: ou todas se realizam ou nenhuma se realiza • Falha de transacções porque:
– SGBD termina-a devido a anomalia durante a execução – Crash de sistema (ex: falha de corrente) – Transacção encontra situação inesperada (ex: não consegue
aceder a disco) e aborta
• Função do Sistema: manter informação sobre as alterações efectuadas por cada transacção activa (num ficheiro de log) e, em caso de aborto, desfazer as alterações das transacções incompletas
© 2013 Técnico Lisboa
[C] Coerência (Integridade) • Uma transação é uma transformação correta de estado
– Supõe-se que o conjunto das ações da transação não viola nenhuma das regras de integridade associadas ao estado.
– Isto requer que a transação seja um programa correto
• Função do Sistema: coerência assegurada por regras de integridade; não é esperado que o SGBD detecte incoerências nos dados devido a erros na programação
© 2013 Técnico Lisboa
11/20/13
7
[I] Isolamento
• Embora as transações se executem concorrentemente, qualquer transação T’ cuja execução se sobreponha com a de uma transação T, aparece, do ponto de vista de T, como tendo sido executada na totalidade antes de T ou depois de T (execução em série)
• Função do Sistema: garantir que uma transação apenas “vê” alterações realizadas por outras transações terminadas com sucesso
[D] Durabilidade (Persistência) • Uma vez completada com sucesso uma transação
(commit concluído), todas as alterações ao estado são imutáveis, sobrevivendo a qualquer tipo de falta do sistema
• Função do Sistema: manter informação sobre alterações efectuadas por cada uma das transações commited (num ficheiro de log) e, em caso de falha refazer as alterações que ainda não se encontravam registadas em disco
11/20/13
8
Exemplo • Considere as duas transacções:
T1: BEGIN A=A+100,B=B-100 END!T2: BEGIN A=1.06*A, B=1.06*B END!
• Intuitivamente, a primeira transfere 100 da conta B para a A e a segunda credita em ambas contas com 6% de juros
• Não existe garantia que T1 se execute antes de T2 ou vice-versa, mas o resultado tem que ser equivalente às duas transacções se executarem em série por uma determinada ordem
Exemplo (cont.) • Considere um possível escalonamento das operações
(schedule)
© 2012 Técnico Lisboa
• Tudo bem! E este?
T1: ! A=A+100, ! ! B=B-100 !T2: ! ! A=1.06*A, ! ! B=1.06*B!
T1: ! A=A+100, ! ! ! !B=B-100 !T2: ! ! A=1.06*A, B=1.06*B!
• A visão do SGBD sobre o segundo escalonamento:
T1: ! R(A), W(A), ! ! ! R(B), W(B)!T2: ! ! !R(A), W(A), R(B), W(B)!
11/20/13
9
Escalonamento (schedule) • Lista de acções (leitura, escrita, abort, ou commit) de um
conjunto de transacções em que a ordem em que duas acções de uma transacção T aparecem no escalonamento é a mesma em que aparecem na transacção – Representa uma sequência de execução potencial ou real – Descreve as acções das transacções tal como vistas pelo SGBD
• Um escalonamento que contém uma instrução de abort ou commit de cada transacção diz-se completo
Anomalias com execução concorrente
• Leitura de dados uncommitted (Conflitos WR, dirty reads)
T1: !R(A), W(A), ! R(B), W(B), Abort!T2: ! ! !R(A), W(A), C!
• Unrepeatable reads (Conflitos RW, dirty reads)
T1: !R(A), ! ! ! R(A), W(A), C!T2: ! !R(A), W(A), C!
11/20/13
10
Anomalias com execução concorrente(cont)
• Overwriting uncommitted data (Conflitos WW)
T1: !W(A), ! ! W(B), C!T2: ! !W(A), W(B), C!
Tipos de escalonamentos • Escalonamento em série: escalonamento em que não
existem acções de diferentes transacções intercaladas
• Escalonamentos equivalentes: se, para qualquer estado da BD, o efeito (no conjunto dos objectos da BD) de executar o primeiro escalonamento é igual ao de executar o segundo
• Escalonamento serializável: escalonamento que é equivalente a alguma execução em série das transacções
11/20/13
11
Escalonamentos em Série
© 2012 Técnico Lisboa
2 1
T1 T2read (A)A := A – 50write (A)read (B)B := B + 50write (B)commit
read (A)temp := A * 0.1A := A tempwrite (A)read (B)B := B + tempwrite (B)commit
T1 T2
read (A)A := A – 50write (A)read (B)B := B + 50write (B)commit
read (A)temp := A * 0.1A := A tempwrite (A)read (B)B := B + tempwrite (B)commit
© 2012 Técnico Lisboa
Escalonamentos Equivalentes O Escalonamento 3 não é em série, mas é equivalente a um em série (logo, serializável)
– em ambos, a soma A+B é preservada
1 3
T1 T2read (A)A := A – 50write (A)read (B)B := B + 50write (B)commit
read (A)temp := A * 0.1A := A tempwrite (A)read (B)B := B + tempwrite (B)commit
T1 T2read (A)A := A – 50write (A)
read (B)B := B + 50write (B)commit
read (A)temp := A * 0.1A := A tempwrite (A)
read (B)B := B + tempwrite (B)commit
11/20/13
12
O escalonamento 4 não preserva A+B © 2012 Técnico Lisboa
Escalonamento não serializável
4 3
T1 T2read (A)A := A – 50
write (A)read (B)B := B + 50write (B)commit
read (A)temp := A * 0.1A := A tempwrite (A)read (B)
B := B + tempwrite (B)commit
T1 T2read (A)A := A – 50write (A)
read (B)B := B + 50write (B)commit
read (A)temp := A * 0.1A := A tempwrite (A)
read (B)B := B + tempwrite (B)commit
Sumário!• Conceito de Transacção!
– Propriedades ACID!Ø Conflitos e Serializabilidade!• Recuperabilidade!• Protocolos de controlo de concorrência!• Transações em SQL!• Recuperação de falhas!
11/20/13
13
© 2012 Técnico Lisboa
Conflitos na Ordem das Instruções
Num escalonamento onde duas transacções T1 e T2 acedem ao mesmo objecto Q • T1: read(Q) e T2: read(Q)
– a ordem é indiferente • T1: read(Q) e T2: write(Q)
– Há conflito: a ordem é relevante • T1: write(Q) e T2: read(Q)
– Há conflito: a ordem é relevante • T1: write(Q) e T2: write(Q)
– Há conflito: a ordem não afecta nem T1 nem T2 mas afecta a próxima instrução de read(Q)
© 2012 Técnico Lisboa
Teste de Serializabilidade Forma simples de determinar se um escalonamento é serializável • construir um grafo de precedências
– os nós são transações (T1, T2, ..., Tn) – os arcos são conflitos (Ti → Tk )
• desenha-se um arco de Ti para Tk se – Ti : write(Q) antes de Tk : read(Q) – Ti : read(Q) antes de Tk : write(Q) – Ti : write(Q) antes de Tk : write(Q)
• Ciclos implicam não serializabilidade
T1 T2
11/20/13
14
© 2012 Técnico Lisboa
Teste de Serializabilidade: Exemplos 1 e 3
2 1
Teste de Serializabilidade: Exemplo 4
O escalonamento 4 de <T1, T2> não é serializável
© 2012 Técnico Lisboa 4
11/20/13
15
Teste de serializabilidade
• Um escalonamento é serializável se o seu grafo de precedências não tiver ciclos (se for acíclico)
• Se o grafo for acíclico, as transações podem ser executadas por qualquer ordem que respeite o grafo
© 2012 Técnico Lisboa
Sumário!• Conceito de Transação!
– Propriedades ACID!• Conflitos e Serializabilidade!Ø Recuperabilidade!• Protocolos de controlo de concorrência!• Transações em SQL!• Recuperação de falhas!
© 2012 Técnico Lisboa
11/20/13
16
© 2012 Técnico Lisboa
Commit
Uma transacção que se completa com sucesso tem uma instrução de commit como última instrução
commit commit
© 2012 Técnico Lisboa
Recuperação em escalonamentos
Uma transacção que falha tem uma instrução de abort ou rollback como última instrução (undo)
commit rollback
11/20/13
17
© 2012 Técnico Lisboa
Escalonamento Não Recuperável
• Problema: quando T8 falha, T9 já completou e não pode ser cancelada – este escalonamento não é recuperável
commit rollback
© 2012 Técnico Lisboa
Escalonamentos Recuperáveis
Considerar apenas escalonamentos recuperáveis – estes escalonamentos devem obedecer à seguinte
condição:
Para qualquer par de transacções Ti e Tk se Ti executa write(Q) antes de Tk executar read(Q) então Ti faz commit antes de Tk fazer commit
commit commit
11/20/13
18
• Erro numa transacção pode levar ao rollback de várias transacções
• Comportamento indesejado – pode obrigar a desfazer várias tarefas já realizadas
Rollbacks em cadeia
© 2012 Técnico Lisboa
erro!
rollback
© 2012 Técnico Lisboa
Considerar apenas escalonamentos sem hipótese de rollback em cadeia estes escalonamentos devem obedecer à seguinte
condição:
Esta condição garante que o escalonamento é também recuperável
Para qualquer par de transacções Ti e Tk se Ti executa write(Q) antes de Tk executar read(Q) então Ti faz commit antes de Tk fazer read
Rollback em cadeia
11/20/13
19
© 2012 Técnico Lisboa
Protocolo de controlo de concorrência
• Os escalonamentos devem ser serializáveis, recuperáveis e preferencialmente sem rollbacks encadeados – um sistema em que só corre 1 transação de cada
vez garante isto, mas elimina a concorrência • Logo, são necessários protocolos que
maximizem a concorrência, mas garantam as condições de serializabilidade desejadas
• Exemplo: Strict Two Phase Locking só permite escalonamentos serializáveis e recuperáveis
Strict Two Phase Locking
1. Se uma transacção T quer ler (ou modificar) um objecto, primeiro pede um lock partilhado (ou exclusivo) sobre o objecto
2. Todos os locks atribuídos a uma transacção são libertados quando a transacção se completa
© 2012 Técnico Lisboa
11/20/13
20
Sumário!• Conceito de Transação!
– Propriedades ACID!• Conflitos e Serializabilidade!• Recuperabilidade!• Protocolos de controlo de concorrência!Ø Transações em SQL!Ø Recuperação de falhas!
© 2012 Técnico Lisboa
Definição de Transações em SQL
• A linguagem SQL tem elementos para dizer que as consultas fazem parte de uma transação
• Em SQL, qualquer consulta, actualização ou criação de tabela inicia implicitamente uma transacção que só termina com – commit – torna os resultados permanentes – rollback – cancela todas as alterações (undo)
© 2012 Técnico Lisboa
11/20/13
21
© 2012 Técnico Lisboa
Sintaxe
• Executar uma transacção start transaction;!!!…!!!commit; !ou !rollback;!
• Vários sistemas usam autocommit por omissão
– se start transaction for omitido • cada consulta é uma transacção • se houver erros, rollback automático • se não houver erros, commit automático
© 2012 Técnico Lisboa
Exemplo Verificar saldos:
select balance from account where account_number = 'A-101';!!select balance from account where account_number = 'A-102';!
Transferir 350€ da conta A-101 para a conta A-102:
start transaction;!!update account set balance = balance – 350 where
!account_number = 'A-101';!!update account set balance = balance + 350 where
!account_number = 'A-102';!!commit;!
11/20/13
22
Duas novas primitivas SQL:1999
• Savepoint – permite identificar um ponto de uma transacção e selectivamente efectuar o rollback das acções executadas depois deste ponto – Útil para transacções longas – savepoint <nome>!– rollback to savepoint <nome>
• Chained transactions – permite que se faça commit ou rollback de uma transacção e se inicie imediatamente outra transacção – Útil para executar transacções umas atrás das outras – Commit/rollback and chain!
© 2012 Técnico Lisboa
Sumário!• Conceito de Transacção!
– Propriedades ACID!• Conflitos e Serializabilidade!• Recuperabilidade!• Protocolos de controlo de concorrência!• Transações em SQL!Ø Recuperação a falhas!
© 2012 Técnico Lisboa
11/20/13
23
Recuperação de falhas
• Para anular as acções de uma transacção que abortou (atomicidade), o SGBD mantém um ficheiro de log (diário) em que cada escrita é registada
• Mecanismo também usado para recuperar de falhas de sistema – Todas as transacções activas na altura da
falha são abortadas quando o sistema é reposto
© 2012 Técnico Lisboa
Log
© 2012 Técnico Lisboa
• São guardadas as seguintes acções no log: – Se Ti escreve um objecto: valor antigo e valor novo
– Registo de log tem que ser guardado em disco antes da página mudada o ser
– Se Ti faz commit ou abort: é escrito registo de log indicando esta acção
• Registos de log são guardados por transacção para ser fácil anular uma transacção específica
• Log é muitas vezes duplicado ou guardado em memória estável
• Todas as actividades de logging são tratadas de forma transparente pelo SGBD
11/20/13
24
Algoritmo de recuperação de falhas
© 2012 Técnico Lisboa
• Três fases do algoritmo Aries: 1. Análise: Percorrer o log para a frente (a partir do
checkpoint mais recente) para identificar todas as transacções que estavam activas e todas as páginas sujas existentes no buffer na altura da falha
2. Redo: Refazer todas as modificações correspondentes a páginas no buffer, se necessário, para assegurar que todas as modificações registadas no log são, de facto, escritas em disco
3. Undo: percorrer o ficheiro de log para trás e anular todas as escritas efectuadas por transacções que estavam activas no momento da falha (repondo o valor antigo conforme registo de modificação no log)
Sumário
• Transacções • Próxima aula: Gestão de controlo de
concorrência – Garante coerência dos dados e isolamento se
estiver garantida a atomicidade das transacções
47