Replication

Replication slots no PostgreSQL: a rede de segurança que pode afundar seu disco

PG Monitoring Team May 14, 2026 7 min de leitura

Replication slots são um recurso pequeno com um raio de impacto enorme. Eles impedem que suas réplicas quebrem — e, quando um é esquecido, são a forma mais comum de um primário PostgreSQL encher o disco e travar. Entender os dois lados é essencial.

O problema que os slots resolvem

O primário recicla segmentos antigos de WAL para liberar disco. Mas se um standby fica brevemente offline e o WAL que ele ainda precisa já foi reciclado, a replicação quebra com o temido "requested WAL segment has already been removed" — e a única correção é reconstruir o standby do zero.

Um replication slot é a promessa do primário: "não vou descartar WAL até este consumidor específico confirmá-lo." Isso torna a replicação durável entre reinícios do standby e quedas de rede.

Dois tipos de slot

-- Slot físico (para réplicas por streaming)
SELECT pg_create_physical_replication_slot('standby1');

-- Slot lógico (para replicação lógica / CDC como Debezium)
SELECT pg_create_logical_replication_slot('cdc_slot', 'pgoutput');

Inspecione todos em uma única view:

SELECT slot_name, slot_type, active,
       pg_size_pretty(
         pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)
       ) AS retained_wal
FROM pg_replication_slots;

O lado sombrio: risco de encher o disco

A mesma promessa que protege vira arma quando um consumidor some. Se um slot fica active = false e nunca volta — uma réplica desativada, um conector CDC que caiu — seu restart_lsn para de avançar. O primário guarda cada segmento de WAL a partir daí, para sempre. O pg_wal cresce até o disco encher e o primário para de aceitar escritas. Esse é um dos outages mais comuns de PostgreSQL na prática.

A trava de segurança: max_slot_wal_keep_size

Desde o PostgreSQL 13 você pode limitar quanto WAL um slot pode reter:

-- postgresql.conf
max_slot_wal_keep_size = 50GB

Passado esse limite, o PostgreSQL invalida o slot atrasado em vez de encher o disco. Você perde aquela réplica (precisa reconstruí-la), mas o primário sobrevive — em geral a troca certa. Verifique slots invalidados pela coluna wal_status (extended, unreserved, lost).

Derrube o que não usa

SELECT pg_drop_replication_slot('old_standby');

Todo slot criado é uma promessa permanente. Desativar uma réplica sem derrubar seu slot é exatamente como o incidente de disco cheio começa.

Por que você quer isso vigiado automaticamente

Um slot inativo é invisível até o alarme de disco disparar às 3 da manhã. O PG Monitoring reporta continuamente o tamanho de WAL retido, o status ativo e a tendência de crescimento de cada slot, e levanta um alerta quando um slot fica inativo ainda prendendo WAL — transformando um outage de madrugada em um chamado de rotina.

Related Articles

Replication

Streaming replication no PostgreSQL, passo a passo

Um passo a passo prático para montar uma réplica física por streaming: configuração do primário, pg_basebackup, replication slots e como verificar se o standby realmente está em dia.

Ready to experience better PostgreSQL monitoring?

Join thousands of teams who switched from traditional tools to PG Monitoring's AI-powered platform.

Fale conosco