Voltar
Como migrar terabytes do Heroku sem usar logical replication

PlanetScale lança Heroku Migrator para migrar bancos de vários terabytes do Heroku sem logical replication

Aprofundamento CEVIU

Aprofundamento

A PlanetScale atacou um problema específico: os planos padrão do Heroku Postgres não oferecem acesso ao WAL nem logical replication. Segundo a empresa, a replicação lógica só chegou ao Heroku Postgres Advanced em outubro de 2026, o que não ajuda quem está nos planos padrão (e exigiria uma migração extra para o tier Advanced). Sem slot de replicação, o caminho online restante é a replicação baseada em triggers, e é isso que o Heroku Migrator faz, usando o Bucardo. Ele instala triggers bucardo_delta em cada tabela de origem, registra inserts, updates e deletes em tabelas de delta e track, faz um COPY único e depois aplica os deltas no destino.

O ganho de velocidade vem da divisão em duas fases. Antes do COPY, o migrator derruba índices secundários e únicos no destino, mantendo as chaves primárias, que o Bucardo precisa para aplicar mudanças. Depois da cópia, pausa a replicação e reconstrói os índices com workers paralelos (maintenance_work_mem de 1GB e 2 workers paralelos de manutenção). Num caso relatado, a cópia saltou de cerca de 60 GB/h para quase 300 GB/h, a reconstrução levou cerca de 2 horas e o processo todo ficou umas 2,5 vezes mais rápido. A empresa também ajustou transaction_timeout=0 nas conexões do Bucardo e configurou TCP keepalives para que conexões derrubadas virem erro em cerca de um minuto, não travamento. Restrições: toda tabela replicada precisa de chave primária ou índice único, e o schema fica congelado durante a migração. Para bases a partir de 500 GB, a recomendação é rodar o migrator numa instância EC2 de alto desempenho.

Por que isso importa

Para quem opera banco no Heroku e não pode ter horas de downtime, a ferramenta tira a necessidade de produto de terceiros ou de subir de tier só para ter logical replication. Na prática, o trabalho pesado vira planejamento: achar tabelas sem chave primária, congelar DDL (inclusive auto-migrations do framework e manutenção do pg_partman) e dimensionar onde o migrator roda. É uma leitura editorial, mas o uso de triggers tende a exigir mais atenção operacional que replicação via WAL, então vale ensaiar o cutover e usar a etapa de verificação.

Perguntas frequentes

Por que o Heroku Migrator usa triggers em vez de logical replication?

Porque os planos padrão do Heroku Postgres não dão acesso ao WAL nem a logical replication. Triggers são o único mecanismo de captura de mudanças disponível nesses planos. O Bucardo registra as alterações e as reaplica no PlanetScale.

Quais são os requisitos para migrar com a ferramenta?

Toda tabela replicada precisa de chave primária ou índice único, senão o Bucardo não identifica a linha a atualizar no destino. Também é preciso congelar mudanças de schema durante a migração. A ferramenta de discovery e o Liftoff ajudam a achar esses problemas antes.

Onde devo rodar o migrator em bancos grandes?

Bancos pequenos e médios podem rodar no próprio Heroku, num dyno (Performance-L para mais de 100 GB). A partir de 500 GB, a recomendação é uma instância EC2 de alto desempenho. Como o Heroku reinicia dynos ao menos uma vez a cada 24 horas, cópias longas ficam mais seguras fora dele.

Como a divisão em duas fases acelera a cópia?

Sem índices secundários e únicos no destino, o COPY escreve bem mais rápido. Depois, os índices são reconstruídos em paralelo. Num caso citado pela PlanetScale, a cópia foi de cerca de 60 GB/h para quase 300 GB/h.

Fontes

Avalie este artigo:
Categoria
CEVIU DevOps
Publicado
13 de novembro de 2026
Editoria
CEVIU DevOps

Quer receber mais sobre CEVIU DevOps?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser