Slots de Replicação
Slots de replicação informam ao primário para reter o WAL até que um consumidor confirme o recebimento. Eles impedem que standbys e assinantes lógicos saiam da linha do tempo do WAL.
Receita
Crie um slot físico para cada standby; remova órfãos prontamente.
-- Slot físico para um standby de streaming
SELECT pg_create_physical_replication_slot('standby1_slot');
-- Inspeciona o atraso e o WAL retido
SELECT slot_name, slot_type, active, restart_lsn,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained
FROM pg_replication_slots;# Remove um slot não utilizado (após confirmar que o standby foi desativado)
psql -h primary.db.internal -U postgres -c \
"SELECT pg_drop_replication_slot('old_standby_slot');"Quando usar isso: Qualquer standby de longa duração, assinante lógico ou ferramenta de backup que não deva perder WAL.
Exemplo de Trabalho
Crie um slot durante o backup base, monitore slots inativos:
# pg_basebackup com criação de slot
pg_basebackup -h primary.db.internal -U replicator \
-D /var/lib/postgresql/18/main -Fp -Xs -P -R \
-C -S standby1_slot-- Consulta de alerta: slot inativo retendo WAL
SELECT slot_name, active,
pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) AS bytes_retained
FROM pg_replication_slots
WHERE NOT active
AND pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) > 1073741824; -- 1 GiBO que isso demonstra:
- Slots físicos vinculam a retenção de WAL a um consumidor nomeado.
active = falsecombytes_retainedgrande sinaliza um consumidor morto enchendo o disco.pg_basebackup -C -Semparelha o clone inicial com a criação de slot em uma etapa.
Mergulho Profundo
Tipos de Slot
| Tipo | Criado por | Consumidor |
|---|---|---|
| Físico | pg_create_physical_replication_slot, pg_basebackup -C | Standby de streaming, pg_receivewal |
| Lógico | pg_create_logical_replication_slot | Assinante de replicação lógica, ferramentas CDC |
Colunas Chave do Catálogo
| Coluna | Significado |
|---|---|
restart_lsn | O WAL mais antigo ainda necessário pelo slot |
confirmed_flush_lsn | Posição confirmada pelo assinante lógico |
active | Consumidor atualmente conectado |
wal_status | reserved, extended, unreserved, lost (PostgreSQL 18) |
Risco de Disco
Slots substituem wal_keep_size e podem impedir a reciclagem de WAL. Combine:
- Alertas de monitoramento por slot
max_slot_wal_keep_sizecomo uma válvula de segurança (PostgreSQL 13+)- Runbook para remover slots abandonados após tickets de alteração
Armadilhas
- Slot inativo após reconstrução falha do standby - O disco primário enche com WAL retido. Correção: Remova o slot ou reconecte o consumidor dentro do SLA.
- Slot lógico sem assinante - Mesma pressão de disco que órfãos físicos. Correção: Rastreie slots no gerenciamento de configuração; alerte em
active = false. - Sem
max_slot_wal_keep_size- Um slot ruim pode esgotar o disco. Correção: Defina uma política de retenção limitada e alerte emwal_status = 'lost'. - Nomes de slot duplicados - A criação falha ou o consumidor errado se vincula. Correção: Nomeie os slots pelo nome do host ou nome do membro do Patroni.
- Slot de backup + arquivamento agressivo - O arquivador e o slot retêm WAL; planeje a capacidade total do disco. Correção: Dimensiona o volume de WAL para o atraso no pior caso mais falhas de arquivamento.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
Apenas wal_keep_size | Standbys de teste efêmeros | Standbys de produção que podem desconectar |
| Arquivo + restauração | DR sem streaming contínuo | Você precisa de failover de hot standby |
| Slot temporário durante a recuperação | Reposição única | Retenção de longo prazo sem monitoramento |
FAQs
Um slot por standby?
Sim para standbys físicos de produção. Assinantes lógicos precisam de seus próprios slots lógicos.
Slots podem existir em standbys?
Standbys físicos não criam slots de remetente; os slots vivem no primário (ou editor lógico upstream).
O que é `wal_status = lost`?
O slot exigiu WAL que já foi removido. Recrie o consumidor a partir de um novo backup base.
O Patroni gerencia slots?
O Patroni 3.x pode criar e sincronizar slots de replicação permanentes em todo o cluster. Verifique a seção slots no YAML do Patroni.
max_slot_wal_keep_size vs. remoção de slots?
max_slot_wal_keep_size limita a retenção, mas pode invalidar consumidores atrasados. Prefira alertas e higiene operacional de slots.
Relacionados
- Noções Básicas de Streaming Replication - configuração de standby
- Monitoramento de Replicação - alertas de atraso
- Noções Básicas de Replicação Lógica - slots lógicos
- Modo de Arquivamento & archive_command - envio de WAL
Versões da Pilha: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x, e PostGIS 3.5+.