Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
Compare os níveis de isolamento do padrão SQL, a implementação do PostgreSQL e escolha o nível adequado para sua carga de trabalho.
Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Quatro níveis padrão
O padrão SQL define quatro níveis de isolamento:
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
O PostgreSQL implementa três (READ UNCOMMITTED comporta-se como READ COMMITTED).
READ COMMITTED (padrão do PostgreSQL)
Cada instrução vê os dados confirmados antes do início da instrução. É possível ver instantâneos diferentes dentro de uma única transação.
-- Inside one transaction:
SELECT balance FROM accounts WHERE id = 1; -- 100
-- meanwhile another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1; -- 200 (non-repeatable read)REPEATABLE READ (isolamento por instantâneo)
Vê um instantâneo obtido no início da transação. Ler novamente a mesma linha sempre devolve o mesmo valor. O REPEATABLE READ do PostgreSQL também impede leituras fantasmas.
BEGIN ISOLATION LEVEL REPEATABLE READ;
SELECT balance FROM accounts WHERE id = 1; -- 100
-- another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1; -- still 100
COMMIT;SERIALIZABLE
O mais forte: é como se as transações fossem executadas uma após a outra. O PostgreSQL usa o isolamento de instantâneos serializável (SSI): detecta dependências simultâneas e aborta transações conflitantes:
BEGIN ISOLATION LEVEL SERIALIZABLE;
...
COMMIT;
-- ERROR: could not serialize access due to read/write dependenciesDefinindo o nível de isolamento
Por transação, por sessão ou globalmente:
-- Per transaction:
BEGIN ISOLATION LEVEL SERIALIZABLE;
-- Per session:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- Default for new transactions in this session:
SET default_transaction_isolation = 'repeatable read';
-- Global default in postgresql.conf:
-- default_transaction_isolation = 'read committed'Anomalias permitidas por cada nível
| Nível | Suja | Não repetível | Fantasma |
|---|---|---|---|
| READ UNCOMMITTED | talvez | talvez | talvez |
| READ COMMITTED | não | talvez | talvez |
| REPEATABLE READ | não | não | não (no PG) |
| SERIALIZABLE | não | não | não |
Compromissos de desempenho
- READ COMMITTED — sobrecarga mínima, padrão
- REPEATABLE READ — o mesmo plano, consistência do instantâneo, sem impacto no desempenho, exceto em caso de conflitos de gravação
- SERIALIZABLE — contabilidade adicional, pode abortar transações; é necessária lógica de repetição na aplicação
Padrão de repetição para SERIALIZABLE
SERIALIZABLE pode abortar com o código 40001. Repita em um ciclo:
for (let i = 0; i < 3; i++) {
try {
await client.query('BEGIN ISOLATION LEVEL SERIALIZABLE');
// ... work ...
await client.query('COMMIT');
break;
} catch (e) {
if (e.code === '40001') continue;
throw e;
}
}Lendo um instantâneo consistente
Para consultas analíticas de longa duração que precisam de dados consistentes, REPEATABLE READ oferece o equilíbrio adequado.
Comportamento em conflitos de gravação
Se duas transações modificarem a mesma linha:
- READ COMMITTED — a segunda espera, depois lê novamente a nova linha e tenta outra vez
- REPEATABLE READ — a segunda é abortada com "could not serialize" — a aplicação precisa tentar novamente
Escolha o nível adequado
Regras práticas:
- OLTP — READ COMMITTED (padrão)
- Relatórios que precisam de consistência — REPEATABLE READ
- Dinheiro / estoque — SERIALIZABLE + repetição, OU bloqueios explícitos (FOR UPDATE)
Bloqueios explícitos às vezes superam o isolamento
Frequentemente, SELECT ... FOR UPDATE em READ COMMITTED é mais simples que SERIALIZABLE para uma única linha muito disputada.
Recapitulação
Os níveis de isolamento trocam segurança por concorrência.
- READ COMMITTED é o padrão
- REPEATABLE READ para leituras consistentes
- SERIALIZABLE para operar "como se fosse serial" — requer lógica de repetição
Verificação rápida
Qual é o nível de isolamento padrão do PostgreSQL?
Perguntas Frequentes
A aula “Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE” é grátis?
Sim — o texto completo de “Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE”?
Compare os níveis de isolamento do padrão SQL, a implementação do PostgreSQL e escolha o nível adequado para sua carga de trabalho. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Propriedades ACID e anomalias
- Níveis de isolamento: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
- Interbloqueios: detecção e prevenção
- Bloqueio otimista vs pessimista