Aula 18 - Transações ACID, Níveis de Isolamento e Locks 🔒
Objetivo Pedagógico
Objetivo: Conceitos avançados de transações ACID, controle de concorrência multiversão (MVCC), anomalias transacionais e níveis de isolamento ANSI SQL.
📑 1. Fundamentos Teóricos & Análise Técnica
O modelo ACID é o alicerce que garante confiabilidade absoluta em sistemas de gerenciamento de bancos de dados relacionais: - Atomicidade (Atomicity): Todas as instruções da transação são confirmadas com sucesso ou todas são revertidas (All-or-Nothing). - Consistência (Consistency): A transação conduz o banco de um estado válido a outro, respeitando restrições de integridade (Foreign Keys, Checks, Uniques). - Isolamento (Isolation): Transações concorrentes executam sem interferência mútua indevida. - Durabilidade (Durability): Uma vez feito o COMMIT, os dados são garantidamente gravados no log de escrita antecipada (WAL - Write-Ahead Logging) antes de retornarem ao cliente.
O padrão ANSI SQL define quatro Níveis de Isolamento para equilibrar concorrência e anomalias: 1. Read Uncommitted: Permite leituras sujas (Dirty Reads). 2. Read Committed: Padrão na maioria dos bancos modernos; impede leituras sujas, mas permite leituras não-repetíveis. 3. Repeatable Read: Garante que leituras repetidas vejam o mesmo snapshot, prevenindo leituras não-repetíveis. 4. Serializable: Simula a execução sequencial estrita de transações, prevenindo inclusive leituras fantasmas (Phantom Reads) e distorção de escrita (Write Skew).
📐 Arquitetura Conceitual & Diagrama de Fluxo
flowchart LR
subgraph MVCC ["Controle de Concorrência Multiversão (MVCC)"]
RowV1["Linha v1 (xmin: 100, xmax: 105)"] --> RowV2["Linha v2 (xmin: 105, xmax: inf)"]
end
Tx102["Transação 102 (Lê snapshot v1 sem travar!)"] -.-> RowV1
Tx108["Transação 108 (Lê snapshot v2)"] -.-> RowV2
Note["Leitores NUNCA bloqueiam Escritores!<br>Escritores NUNCA bloqueiam Leitores!"]
style MVCC fill:#e3f2fd,stroke:#1565c0
style RowV1 fill:#fff3e0,stroke:#e65100
style RowV2 fill:#e8f5e9,stroke:#2e7d32 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Write-Ahead Logging (WAL): Gravação síncrona sequencial no log de transações para recuperação pós-queda (Crash Recovery). - MVCC em PostgreSQL: Cada linha possui identificadores xmin e xmax determinando a visibilidade de acordo com o snapshot da transação. - Pessimistic vs. Optimistic Locking: Uso de SELECT ... FOR UPDATE para bloqueio explícito de linhas sob alta disputa. - Detecção de Deadlocks: O motor identifica grafos cíclicos de espera entre transações e aborta uma delas automaticamente.
🛠️ 2. Implementação Prática em Transações Relacionais, Concorrência e MVCC
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// pessimistic_lock.sql (Transação com Bloqueio Pessimista SELECT FOR UPDATE)
-- Início da transação com nível de isolamento explícito
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 1. Bloqueia a linha da conta para escrita concorrente (Lock de Linha)
SELECT balance
FROM bank_accounts
WHERE id = 101
FOR UPDATE;
-- 2. Executa a operação com saldo garantidamente consistente
UPDATE bank_accounts
SET balance = balance - 250.00
WHERE id = 101;
-- 3. Registra o lançamento contábil
INSERT INTO transaction_audit (account_id, amount, operation)
VALUES (101, -250.00, 'SAQUE_ATM');
-- 4. Confirma todas as operações de forma atômica
COMMIT;
💡 Análise Passo a Passo do Código
- Cláusula FOR UPDATE: Coloca um lock exclusivo na linha da conta até o fim da transação, forçando outras transações concorrentes a aguardar.
- Atomicidade Garantida: Se a gravação da auditoria falhar, o
ROLLBACKanula o débito da conta bancária. - Consistência em Alto Volume: Impede que dois caixas eletrônicos saquem o mesmo saldo simultaneamente.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto