Fundamentos de Transações
Definição
Uma transação é uma unidade lógica de trabalho que contém uma ou mais operações de banco de dados. Todas as operações em uma transação são tratadas como uma única unidade atômica de trabalho que deve ser completamente executada ou completamente revertida.
Propriedades ACID
As transações são caracterizadas pelas propriedades ACID:
Atomicidade (Atomicity)
Garante que todas as operações dentro da transação sejam tratadas como uma única unidade
Ou todas as operações são executadas com sucesso, ou nenhuma é
Não existem estados intermediários
Se qualquer uma das operações falhar, nenhuma alteração será aplicada.
Consistência (Consistency)
Garante que o banco de dados mude de um estado válido para outro estado válido
Todas as regras de integridade são respeitadas
Constraints, triggers e regras de negócio são preservadas
Isolamento (Isolation)
Garante que as transações sejam isoladas umas das outras
Uma transação não deve ser afetada por outras transações concorrentes
Diferentes níveis de isolamento oferecem diferentes garantias
Durabilidade (Durability)
Garante que uma vez que uma transação seja confirmada, suas alterações são permanentes
As alterações persistem mesmo em caso de falha do sistema
Implementada através de logs de transação e mecanismos de recuperação
Níveis de Isolamento
Os SGBDs oferecem diferentes níveis de isolamento que equilibram consistência e desempenho:
Read Uncommitted
Nível mais baixo de isolamento
Permite leitura de dados não confirmados (dirty reads)
Maior desempenho, menor consistência
Read Committed
Evita leituras sujas (dirty reads)
Permite leituras não repetíveis (non-repeatable reads)
Nível padrão em muitos SGBDs
Repeatable Read
Evita leituras sujas e não repetíveis
Permite leituras fantasmas (phantom reads)
Maior consistência, menor desempenho
Serializable
Nível mais alto de isolamento
Evita todos os problemas de concorrência
Menor desempenho, maior consistência
Anomalias de Concorrência
Dirty Read (Leitura Suja)
Ocorre quando uma transação lê dados que foram modificados por outra transação não confirmada.
Non-repeatable Read (Leitura Não Repetível)
Ocorre quando uma transação relê dados e encontra que foram modificados por outra transação confirmada.
Phantom Read (Leitura Fantasma)
Ocorre quando uma transação relê um conjunto de linhas que satisfazem uma condição e encontra que o conjunto mudou devido a outra transação.
Bloqueios (Locks)
Os SGBDs utilizam bloqueios para implementar o isolamento:
Tipos de Bloqueios
Compartilhado (Shared): Permite leitura, mas não escrita
Exclusivo (Exclusive): Permite leitura e escrita, bloqueia outros acessos
Atualização (Update): Inicialmente compartilhado, pode ser promovido para exclusivo
Intenção (Intent): Indica intenção de adquirir bloqueios em níveis inferiores
Granularidade de Bloqueios
Banco de dados: Bloqueia todo o banco
Tabela: Bloqueia uma tabela inteira
Página: Bloqueia uma página de dados
Linha: Bloqueia apenas uma linha
Coluna: Bloqueia apenas uma coluna
Deadlocks
Situação onde duas ou mais transações estão esperando uma pela outra para liberar recursos.
Controle de Concorrência Multiversão (MVCC)
Muitos SGBDs modernos utilizam MVCC (Multi-Version Concurrency Control):
Mantém múltiplas versões dos dados
Leitores não bloqueiam escritores
Escritores não bloqueiam leitores
Cada transação vê um snapshot consistente do banco de dados
Implementado em PostgreSQL, Oracle, MySQL InnoDB, etc.
Exemplos Práticos
Transferência Bancária
Processamento de Pedido
Conclusão
As transações são fundamentais para garantir a integridade dos dados em sistemas de banco de dados. Compreender seus princípios e mecanismos é essencial para desenvolver aplicações robustas e confiáveis.
Os conceitos ACID, níveis de isolamento e controle de concorrência são pilares do processamento transacional que permitem que múltiplos usuários trabalhem simultaneamente com os dados, mantendo a consistência e a integridade do banco de dados.