Bases de Dados Transacções Propriedades ACID Atomicidade • se a transação falhar entre os passos 4 – 6, 6 os passos 1 – 3 ficam sem efeito Consistência • a soma A+B tem que ser igual antes e depois 1 2 3 4 5 6 Ti : read(A) A := A – 50 write(A) read(B) B := B + 50 write(B) Isolamento • nenhuma outra operação deve ler os valores de A e B entre os passos 3 e 6 Durabilidade • se a transacção termina com sucesso, as alterações são definitivas IST ▪ DEI ▪ Bases de Dados 2 1 Transacções e concorrência A forma mais fácil de garantir que 2 transacções não interferem seria executá-las em série • mas assim o sistema opera à velocidade do componente mais lento (disco) • faz com que pequenas transacções tenham que esperar pela conclusão de transacções mais demoradas IST ▪ DEI ▪ Bases de Dados 3 Transacções e concorrência Os SGBDs permitem que múltiplas transacções sejam executas concorrentemente Necessidade de escalonar transacções concorrentes Escalonamento • ordem cronológica pela qual as instruções de várias transacções são executadas ▫ preservar a ordem das instruções de cada transacção IST ▪ DEI ▪ Bases de Dados 4 2 Escalonamento – exemplos 1 e 2 T1 transfere 50€ de A para B T2 transfere 10% de A para B • estes são escalonamentos em série: 1 2 IST ▪ DEI ▪ Bases de Dados 5 Escalonamento – exemplos 1 e 3 O escalonamento 3 não é em série, mas é equivalente • em ambos, a soma A+B é preservada 1 3 IST ▪ DEI ▪ Bases de Dados 6 3 Escalonamento – exemplos 3 e 4 O escalonamento 4 não preserva A+B 3 4 IST ▪ DEI ▪ Bases de Dados 7 Ordem das instruções Num escalonamento onde 2 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) ▫ a ordem é importante • T1: write(Q) e T2: read(Q) ▫ a ordem é importante p • T1: write(Q) e T2: write(Q) ▫ a ordem não afecta nem T1 nem T2 mas afecta a próxima instrução de read(Q) IST ▪ DEI ▪ Bases de Dados 8 4 Instruções de leitura e escrita 3 IST ▪ DEI ▪ Bases de Dados 9 Serialização por conflitos Existe conflito se as instruções de T1 e T2 tiverem de ser feitas numa certa ordem • se não houver conflito, podem ser trocadas IST ▪ DEI ▪ Bases de Dados 10 5 Objectivo da serialização Se cada transacção preserva a consistência da BD • então o escalonamento em série também preserva • logo, se for possível demonstrar que um escalonamento concorrente é serializável ▫ então esse escalonamento concorrente também preserva a consistência da BD IST ▪ DEI ▪ Bases de Dados 11 Teste de serialização Forma simples de determinar se um escalonamento é serializável • construir um grafo de precedências ▫ os nós são transacçõ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) IST ▪ DEI ▪ Bases de Dados 12 6 Teste de serialização – exemplos 1 e 3 1 2 IST ▪ DEI ▪ Bases de Dados 13 Teste de serialização – exemplo 4 O escalonamento 4 não é serializável 4 IST ▪ DEI ▪ Bases de Dados 14 7 Teste de serialização – outros exemplos Um escalonamento é serializável se o seu grafo de precedências não ã ti tiver ciclos i l ((acíclico) í li ) Se o grafo for acíclico, as transacções podem ser executadas por qualquer ordem que respeite o grafo IST ▪ DEI ▪ Bases de Dados 15 Problemas na serialização por conflitos Segundo os critérios, este escalonamento não é serializável i li á l • mas sabemos que é válido (mantém A+B) • exigiria análise mais detalhada das operações… IST ▪ DEI ▪ Bases de Dados 16 8 Recuperação em escalonamentos Uma transacção que complete com sucesso tem uma instrução de commit como última instrução commit commit U Uma ttransacção ã que ffalhe lh ttem uma iinstrução t ã d de abort b t como última instrução • ao que se segue o rollback (undo) da transacção 17 IST ▪ DEI ▪ Bases de Dados Recuperação em escalonamentos commit abort Quando T8 falha, T9 já completou e não pode ser cancelada l d • este escalonamento não é recuperável IST ▪ DEI ▪ Bases de Dados 18 9 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 19 IST ▪ DEI ▪ Bases de Dados Rollback encadeado Erro numa transacção pode levar ao rollback de várias transacções abort commit Comportamento indesejado • pode obrigar a desfazer várias tarefas já realizadas IST ▪ DEI ▪ Bases de Dados 20 10 Rollback encadeado Considerar apenas escalonamentos sem hipótese de rollback encadeado • 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 read Esta condição garante que o escalonamento é também recuperável IST ▪ DEI ▪ Bases de Dados 21 Controlo de concorrência Os escalonamentos devem ser serializáveis, recuperáveis e preferencialmente sem rollbacks encadeados d d • um sistema em que só corre 1 transacção de cada vez garante isto, mas elimina a concorrência • são necessários mecanismos que permitam a concorrência, mas garantam as condições desejadas IST ▪ DEI ▪ Bases de Dados 22 11 Níveis de isolamento menos exigentes Algumas operações não exigem 100% de consistência • p.ex. uma consulta que determina de forma aproximada o saldo médio de todas as contas • p.ex. o cálculo de dados estatísticos para optimização de operações Estas transacções não precisam de ser serializadas com outras • poupam-se poupam se as verificações e deixa deixa-se se a transacção correr em livremente em paralelo ▫ solução de compromisso entre exactidão dos resultados e desempenho do sistema 23 IST ▪ DEI ▪ Bases de Dados Níveis de isolamento em SQL dirty reads non-repeatable reads phantom reads SERIALIZABLE S não ão não ão não ão REPEATABLE READ não não possível READ COMMITTED não possível possível possível possível possível Nível de isolamento READ UNCOMMITTED dirty y read: a transaction reads data written byy a concurrent uncommitted transaction. nonrepeatable read: a transaction re-reads data it has previously read and finds that data has been modified by another transaction (that committed since the initial read) phantom read: a transaction re-executes a query returning a set of rows that satisfy a search condition and finds that the set of rows satisfying the condition has changed due to another recently-committed transaction. 24 IST ▪ DEI ▪ Bases de Dados 12 Definição de transacções em SQL As linguagens de manipulação de dados têm de ter elementos para dizer que acções fazem parte de uma t transacção ã Em SQL, qualquer operação inicia implicitamente uma transacção que só termina com • commit – torna os resultados permanentes • rollback – cancela a transacção actual IST ▪ DEI ▪ Bases de Dados 25 Exemplo com Postgres Executar uma transacção start transaction; … commit; ou rollback; Vários sistemas usam autocommit por omissão • se start transaction for omitido ▫ cada operação é uma transacção ▫ commit automático no fim da operação IST ▪ DEI ▪ Bases de Dados 26 13 Exemplo com Postgres Verificar saldos: select balance from account where account_number = 'A-101'; select balance from account where account_number account number = 'A A-102 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; IST ▪ DEI ▪ Bases de Dados 27 14