Caso real · Banco de dados

Replicação transacional no SQL Server: como tirar a leitura da API do banco de produção

Edson Feitosa de Oliveira Junior
Edson Feitosa de Oliveira Junior Fundador · PruPru Digital Services · Natal/RN

Uma empresa precisava expor dados do ERP para uma nova API interna. O banco de produção tinha cerca de 200 GB e já atendia o sistema principal o dia todo. Colocar as consultas da API direto nele significava disputar CPU, memória e bloqueios com quem estava faturando pedidos.

A solução que desenhei e coloquei em produção foi a replicação transacional do SQL Server para um servidor clone somente leitura. A API só lê do clone. Abaixo está o passo a passo e os cuidados que aprendi no caminho.

Quando a replicação transacional faz sentido

Se um atraso de horas é aceitável, um restore diário de backup costuma ser mais simples.

A arquitetura

Três agentes do SQL Server Agent fazem o trabalho: o Snapshot Agent gera a carga inicial, o Log Reader Agent lê o log de transações do publicador e o Distribution Agent aplica as mudanças no assinante.

Pré-requisitos que valem uma auditoria antes

Antes de configurar, escrevi um script T-SQL de auditoria para verificar tudo de uma vez. Os pontos que mais derrubam a configuração:

SELECT s.name AS esquema, t.name AS tabela
FROM sys.tables t
JOIN sys.schemas s ON s.schema_id = t.schema_id
WHERE OBJECTPROPERTY(t.object_id, 'TableHasPrimaryKey') = 0
ORDER BY 1, 2;

Os 4 passos de configuração

  1. Configurar o distribuidor (Replication → Configure Distribution), definindo o banco distribution e a pasta de snapshot.
  2. Criar a publicação transacional com apenas as tabelas que a API precisa. Publicar o banco inteiro aumenta o snapshot e o tráfego sem necessidade.
  3. Criar a assinatura push apontando para o banco do clone.
  4. Gerar e aplicar o snapshot inicial, de preferência fora do horário comercial: numa base grande, essa é a etapa mais pesada.

Monitoramento: o que vigiar todo dia

Replicação que ninguém monitora para em silêncio. Montei uma rotina diária que verifica dois números e envia alerta por e-mail quando passam do limite:

SELECT name, log_reuse_wait_desc
FROM sys.databases
WHERE name = 'SEU_BANCO';
-- REPLICATION de forma persistente = Log Reader parado ou atrasado

Alterações de esquema sem quebrar a replicação

Segurança e desempenho do clone

Checklist de go-live

Antes de apontar a API para o clone, conferi itens como estes (a versão completa tinha 14 pontos):

Essa arquitetura roda hoje por trás de um portal interno em produção. O documento de operação começou na versão 1.0 e chegou à 2.0 com base nos problemas reais que apareceram no uso.

Perguntas frequentes

Replicação transacional funciona no SQL Server Standard?

Sim. A replicação transacional está disponível na edição Standard. O assinante pode até ser uma edição Express, com limitações de tamanho de banco.

Qual o atraso típico da replicação transacional?

Em rede local e com carga normal, costuma ficar em poucos segundos. Picos de gravação, snapshots e manutenção de índices podem aumentar o atraso, por isso vale medir com tracer tokens.

O log de transações da produção pode crescer por causa da replicação?

Pode. Se o Log Reader Agent parar, o log não é liberado. Monitore log_reuse_wait_desc e o espaço em disco do publicador.

Precisa de ajuda com um sistema assim?

A PruPru desenvolve e corrige sistemas web em Java/Spring Boot e React para empresas de Natal/RN e do restante do Brasil. Conte o problema pelo WhatsApp e receba um diagnóstico sem compromisso.

Ver serviços →

Sobre o autor

Edson Feitosa de Oliveira Junior é fundador da PruPru Digital Services, em Natal/RN. Trabalhou 15 anos como técnico em segurança eletrônica (2002–2017), migrou para o desenvolvimento de software e atuou como desenvolvedor no Mercado Livre (2022–2025). Hoje é desenvolvedor backend Java em uma distribuidora de Natal e cursa Engenharia de Software (UniFatecie) e Sistemas para Internet (IFRN). Os casos deste blog marcados como “caso real” vêm de sistemas que ele construiu e mantém em produção.

Falar no WhatsApp agora