Gerência de Transações Distribuídas Gerência de Transações Distribuídas Alcides Pamplona [email protected] Alcides Pamplona 2010 © © 1998 M. Tamer Özsu e Patrick Valduriez (tradução livre e adaptações Fernanda Baião) Banco de Dados Distribuídos Gerência de Transações Distribuídas Conteúdo Transações Controle Distribuído de Concorrência Métodos de Controle de Concorrência Deadlocks Alcides Pamplona 2010 © Banco de Dados Distribuídos 1 Gerência de Transações Distribuídas Conceitos Básicos Uma transação é definida como uma ou mais operações que alteram o estado do banco de dados. As transações devem ser atômicas, ou seja, indivisíveis. Só possuindo um estado, se algo impedir o término da transação o banco deve ser restaurado ao estado anterior ao início da transação através de um mecanismo de rollback. 3 Alcides Pamplona 2010 © Banco de Dados Distribuídos Gerência de Transações Distribuídas Banco de Dados pode ficar inconsistente durante a transação Fim da Transação Inicio da Transação Banco de Dados em Estado Consistente Banco de dados em Estado Consistente Estados da Transação Execução da Transação 4 Alcides Pamplona 2010 © Banco de Dados Distribuídos 2 Gerência de Transações Distribuídas Propriedade das Transações ATOMICIDADE Tudo ou nada Em caso de falha, resultados parciais são desfeitos Recuperação de transação x recuperação de falha CONSISTÊNCIA Não viola restrições de integridade (programa correto) Vários “graus”: T não sobrescreve dados ainda em atualização por outra transação (“sujos”), T não efetiva nenhuma escrita entes do EOT, T não lê dados sujos, dados lidos por T não são sujos antes do seu término ISOLAMENTO Atualizações concorrentes são invisíveis Se várias transações são executadas concorrentemente, os resultados devem ser os mesmos como se elas fossem executadas serialmente em alguma ordem DURABILIDADE Atualizações completadas com sucesso (commit) são persistentes 5 Alcides Pamplona 2010 © Banco de Dados Distribuídos Gerência de Transações Distribuídas Processamento de Transações Para processar uma transação, cada nó do sistema contém dois subsistemas, um Gerenciador de Transações e um Coordenador de Transações. Gerenciador de Transações: é responsável pelo gerenciamento de execuções das transações (ou subtransações), que acessam dados armazenados em um nó local, além de garantir as propriedades ACID. Coordenador de Transações coordena a execução de várias transações (locais e globais) iniciados naquele nó e deve garantir a atomicidade da transação através do protocolo de efetivação, em que o protocolo mais utilizado é o Protocolo de Efetivação em duas fases (two-phase commit protocol) que será detalhado mais à frente. 6 Alcides Pamplona 2010 © Banco de Dados Distribuídos 3 Gerência de Transações Distribuídas Protocolo Two-fase commit (2PC) Serve para assegurar a consolidação atômica de transações distribuídas. Uma transação distribuída necessita de um commit especial. Durante uma transação, o gerenciador não pode aguardar indefinidamente a resposta de commit de um dos sites, pois, se durante o commit de um deles, ocorrer um erro, e outros já deram commit, não será possível dar rollback na transação. Por isso o 2PC divide esta tarefa em duas fases: 7 Alcides Pamplona 2010 © Banco de Dados Distribuídos Gerência de Transações Distribuídas Protocolo Two-fase commit (2PC) Fase 1 - preparação O gerenciador de transação envia uma mensagem “prepare” a todos os sites participantes e entra em estado de espera. Os gerenciadores locais de cada site participante da transação verificam a possibilidade de consolidar a transação e respondem. Depois de receber uma resposta de todos os participantes, o gerenciador decide entre consolidar ou abortar a transação (Fase Commit). 8 Alcides Pamplona 2010 © Banco de Dados Distribuídos 4 Gerência de Transações Distribuídas Protocolo Two-fase commit (2PC) Fase 2 - Commit O gerenciador decide sobre a transação através de duas regas: Se um dos participantes votar por abortar a transação, o gerenciador tem de chegar a uma decisão de abortar global. Se todos os participantes votarem por consolidar a transação, o gerenciador tem de chegar a uma decisão de consolidação global. 9 Alcides Pamplona 2010 © Banco de Dados Distribuídos Gerência de Transações Distribuídas Controle de Concorrência O problema de sincronizar transações concorrentes de forma a manter a consistência do banco de dados e atingir, ao mesmo tempo, nível elevado de concorrência Anomalias: Atualizações perdidas Os efeitos de algumas transações não são refletidos no banco Leituras inconsistentes Se uma transação lê um mesmo item de dado mais de uma vez, deve sempre encontrar o mesmo valor 10 Alcides Pamplona 2010 © Banco de Dados Distribuídos 5 Gerência de Transações Distribuídas Controle de Concorrência Inicio() Inicio() Leia (Saldo) Saldo = 100 Some (10) Saldo = 100 Escreva (Saldo) Commit() Leia (Saldo) Subtraia (30) Escreva (Saldo) Saldo = 110 Saldo = 70 Alcides Pamplona 2010 © Commit() Banco de Dados Distribuídos Gerência de Transações Distribuídas Algoritmos de controle de concorrência Algoritmos de Controle de Concorrência Otimistas Pessimistas Bloqueios (2PL) Ordenação de timestamp Centralizados Básicos Cópia Primária Várias Versões Distribuídos Conservativos Híbridos Bloqueio Ordenação de timestamp 12 Alcides Pamplona 2010 © Banco de Dados Distribuídos 6 Gerência de Transações Distribuídas Algoritmos de controle de concorrência PESSIMISTAS Validação Leitura Cálculo Escrita Cálculo Validação Escrita OTIMISTAS Leitura 13 Alcides Pamplona 2010 © Banco de Dados Distribuídos Gerência de Transações Distribuídas Controle distribuído de concorrência Um dos algoritmos mais difundidos é o bloqueio (lock). Este mecanismo funciona quando algum processo (o que dá início à transação) requer operações de leitura ou gravação sobre registros (ou outro objeto do banco de dados). Como parte da transação, ele deve primeiro obter o bloqueio do recurso ou dos recursos que irá utilizar. Se outros processos requisitarem esses recursos não irão obtê-los, pelo fato destes estarem bloqueados. O gerenciador mantém uma lista de objetos bloqueados e assim rejeita todas as demais tentativas de bloqueio. 14 Alcides Pamplona 2010 © Banco de Dados Distribuídos 7 Gerência de Transações Distribuídas Bloqueios Transações indicam suas intenções solicitando bloqueios do gerenciador de bloqueios. Bloqueios podem ser de leitura (rl) [bloqueio compartilhado] ou bloqueio de gravação (wl) [bloqueio exclusivo] Bloqueios de leitura e de gravação conflitam (porque operações de leitura e escrita são incompatíveis) rl wl rl Sim Não wl Não Não Bloqueios funcionam bem ao permitir processamento concorrente de transações 15 Alcides Pamplona 2010 © Banco de Dados Distribuídos Gerência de Transações Distribuídas Controle de concorrência Centralizado: Um único nó se responsabiliza por gerenciar as solicitações de bloqueio e desbloqueio para todos os nós Cópia primária: Uma cópia de cada objeto é chamada de cópia primária. Todas as requisições de bloqueio ou desbloqueio de uma cópia do objeto são gerenciadas pelo nó onde a cópia primária está armazenada. Distribuido: Requisição de bloqueio ou desbloqueio de uma cópia do objeto é manipulada pelo gerenciador de bloqueio do nó onde está armazenada Alcides Pamplona 2010 © Banco de Dados Distribuídos 8 Gerência de Transações Distribuídas Bloqueio em duas Fases (2PL) Uma transação bloqueia um objeto antes de usá-lo Quando um objeto está bloqueado por outra transação, a transação solicitante do bloqueio deve aguardar Quando uma transação libera um bloqueio, não pode solicitar outro bloqueio 17 Alcides Pamplona 2010 © Banco de Dados Distribuídos Gerência de Transações Distribuídas Ordenação por timestamp É atribuído um timestamp único global ts(Ti ) para cada transação (Ti ) Gerenciador de transações atribui o timestamp a todas as operações da transação O número de timestamp é caracterizado por um grupo de dois dígitos O digito menos significante identifica o nó no qual o evento ocorre O dígito mais significante identifica o evento que ocorre naquele nó. Operações conflitantes são resolvidas pela ordem do timestamp. 18 Alcides Pamplona 2010 © Banco de Dados Distribuídos 9 Gerência de Transações Distribuídas Exemplo de uso de Timestamp Nó 1 Nó 2 Nó 3 19 Alcides Pamplona 2010 © Banco de Dados Distribuídos Gerência de Transações Distribuídas Controle de Concorrência Otimista Modelo de execução da transação: dividir em subtransações, cada uma executando em um nó Tij : transação Ti que executa no nó j Transações executam independentemente em cada nó até que alcançam o final da sua fase de leitura Todas as subtransações recebem um timestamp no final da sua fase de leitura Teste de Validação realizado durante a fase de validação. Se um falha, todas são rejeitadas Nível mais alto de concorrência Custo de armazenamento mais elevado 20 Alcides Pamplona 2010 © Banco de Dados Distribuídos 10 Gerência de Transações Distribuídas Deadlocks Um deadlock ou impasse pode ocorrer porque as transações esperam uma pela outra Uma transação está em “deadlock” se está bloqueada e permanecerá assim até que ocorra uma intervenção externa Algoritmos de CC baseados em bloqueio podem resultar em impasses Algoritmos de ordenação de timestamp que exigem a espera de transações também podem causar impasses Gráfico de espera (Wait-for graph – WFG) Existe um arco Ti →Tj no WFG se a transação Ti estiver esperando que outra transação Tj libere um bloqueio sobre alguma entidade. 21 Alcides Pamplona 2010 © Banco de Dados Distribuídos Gerência de Transações Distribuídas Gerência de deadlocks Ignorar Deixe que o programador da aplicação lide com ele, ou re-inicie o sistema Prevenção Garantir que os impasses nunca ocorram. Gerenciador de transações verifica uma transação quando ela é iniciada e não permite que ela prossiga se houver possibilidade de impasse. Não exigem suporte em tempo de execução. Não adequada p/ SGBD Anulação Detectam situações potenciais de impasse com antecedência e asseguram que eles não ocorrerão (ordem pré-definida, timestamp). Exigem suporte em tempo de execução. Detecção e Recuperação (mais usual) Permitem que impasses ocorram, detectam-nos monitorando formação de ciclos no WFG e rompendo-os. Exigem suporte em tempo de execução Alcides Pamplona 2010 © 22 Banco de Dados Distribuídos 11 Gerência de Transações Distribuídas Exercício 04 Dado o conjunto de Transações abaixo defina a melhor forma de ordená-los e que método seria indicado. T1 T2 T3 Leia (x) Escreva(x) Leia(x) Escreva (x) Escreva(y) Leia(y) Commit Leia(z) Leia(z) Commit Commit 23 Alcides Pamplona 2010 © Banco de Dados Distribuídos 12