← Voltar ao blog
    Banco de Dados8 min
    Como escalar banco sem downtime em produção

    Como escalar banco sem downtime em produção.

    Uma operação que precisa descobrir como escalar banco sem downtime geralmente já está próxima de um limite perigoso: CPU sustentada em alta, I/O saturado, pool de conexões no teto, crescimento de latência e janelas de manutenção que o negócio não aceita mais. Nesse estágio, aumentar recursos sem método pode apenas transferir o gargalo - ou criar uma indisponibilidade maior que a que se pretendia evitar.

    Escalabilidade sem interrupção não é uma funcionalidade isolada do banco de dados ou da cloud. É uma disciplina de arquitetura e operação. Exige entendimento do perfil de carga, capacidade de reversão, replicação consistente, comportamento da aplicação e monitoramento que detecte degradação antes que ela se transforme em incidente.

    O primeiro princípio: escalar não é apenas aumentar máquina

    O scale-up vertical continua sendo válido em muitos ambientes. Mais CPU, memória, IOPS ou throughput de rede podem resolver uma limitação objetiva. Em serviços gerenciados, porém, uma alteração de classe pode exigir failover, reinicialização ou uma janela de manutenção. Em clusters autogerenciados, a mudança pode afetar parâmetros de kernel, storage ou a própria camada de virtualização.

    Por isso, o ponto não é prometer que toda expansão vertical será invisível. O ponto é desenhar o ambiente para absorver o evento sem parar a aplicação. Isso normalmente significa múltiplas réplicas, conexão com failover bem configurado, timeouts corretos e teste real de troca de nó primário.

    Escala horizontal atende a outro conjunto de problemas. Réplicas de leitura reduzem a pressão sobre o primário quando o tráfego é majoritariamente consultivo. Sharding distribui dados e escrita entre múltiplos nós, mas introduz complexidade de roteamento, transações distribuídas, rebalanço e governança. Não é uma decisão para tomar sob pressão, durante um pico de vendas ou depois de um alarme de capacidade.

    Antes de mudar, encontre o gargalo real

    Um banco de dados lento não prova que falta capacidade. Pode haver consultas sem índice, planos de execução degradados, bloqueios, contenção em sequências, checkpoints mal ajustados, excesso de conexões ou uma aplicação fazendo leituras repetidas sem cache. Escalar infraestrutura para sustentar desperdício aumenta custo e adia o problema.

    A análise precisa começar pelos indicadores que afetam produção: latência p95 e p99, taxa de transações, IOPS, fila de disco, uso de CPU por processo, buffer cache, conexões ativas, waits, lock time, replication lag e crescimento do volume de dados. Também é necessário correlacionar esses sinais com versões de aplicativo, campanhas comerciais, horários de fechamento e rotinas batch.

    Uma query que consome pouco em um ambiente de teste pode bloquear milhares de transações em produção. Da mesma forma, uma réplica aparentemente saudável pode apresentar atraso relevante justamente durante uma recuperação de nó. Medir média não basta. Operações críticas precisam enxergar os extremos e os cenários de falha.

    Capacidade deve ser planejada com margem operacional

    Planejar para o consumo atual é planejar para o próximo incidente. A capacidade precisa considerar crescimento esperado, picos sazonais, eventos de campanha, processos de conciliação, backups, retenção, reconstrução de índices e a perda eventual de um nó.

    Em uma arquitetura com alta disponibilidade, a pergunta correta é: o ambiente mantém o SLA depois da falha de uma réplica ou de uma zona de disponibilidade? Se a resposta for não, o cluster já está subdimensionado, ainda que os dashboards pareçam confortáveis em condição normal.

    Defina gatilhos de expansão com antecedência. Eles podem combinar consumo sustentado, tendência de crescimento e risco de esgotamento. Um alerta de disco a 95% não é gestão de capacidade. É uma notificação tardia de que a margem de segurança foi perdida.

    Como escalar banco sem downtime na prática

    A estratégia depende do mecanismo utilizado, da topologia e do nível de consistência exigido, mas há uma sequência operacional que reduz drasticamente o risco.

    Primeiro, valide a arquitetura de alta disponibilidade. Deve existir um primário capaz de atender as escritas e réplicas com capacidade suficiente para absorver leituras ou assumir o tráfego em um failover. A replicação precisa ser monitorada continuamente. Uma réplica atrasada não é uma garantia de recuperação confiável.

    Depois, valide a camada de conexão. Aplicações não podem manter conexões presas ao endereço de um único servidor ou falhar indefinidamente após uma troca de primário. Proxy, endpoint virtual, DNS controlado ou driver compatível podem fazer parte da solução, mas todos precisam ser testados sob falha. Configurações de retry sem limite, por exemplo, podem amplificar a indisponibilidade e saturar o banco no retorno.

    Em seguida, execute a mudança em uma réplica ou em um nó secundário quando a tecnologia permitir. Amplie recursos, aplique parâmetros, valide desempenho e acompanhe a sincronização. Só então faça um switchover controlado. O objetivo é que o nó preparado assuma como primário com perda mínima ou nula de sessões, conforme o desenho da aplicação.

    A ordem operacional importa:

    • confirme backup recuperável e ponto de restauração compatível com o risco da mudança;
    • teste o procedimento de failover e o retorno ao estado anterior em ambiente representativo;
    • congele alterações concorrentes de schema, jobs pesados e deploys durante a execução;
    • acompanhe métricas técnicas e indicadores de negócio em tempo real;
    • mantenha um plano de rollback com responsáveis, critérios objetivos e tempo máximo de decisão.

    O procedimento deve ser documentado antes do início. Em ambiente crítico, improviso não é agilidade. É exposição operacional.

    Mudanças de schema exigem outra camada de cuidado

    Escalar capacidade sem downtime perde valor se uma alteração de tabela bloquear o banco por minutos. DDL é uma das causas mais comuns de incidentes evitáveis em operações transacionais. Adicionar uma coluna, criar um índice ou mudar um tipo de dado pode parecer trivial, mas o impacto depende da versão do banco, do volume, dos locks e do algoritmo utilizado pela ferramenta.

    A abordagem segura privilegia mudanças compatíveis entre versões de aplicação. Primeiro, adicione estruturas novas de forma não bloqueante quando possível. Depois, publique o código capaz de operar com o modelo antigo e o novo. Migre dados em lotes controlados, valide e só remova estruturas antigas quando não houver mais dependências.

    Índices online, ferramentas de alteração online e migrações por etapas ajudam, mas não eliminam a necessidade de teste. Um processo de backfill mal dimensionado pode gerar pressão de I/O, replication lag e crescimento excessivo de logs. O banco continua disponível, porém a experiência do usuário degrada. Para o negócio, essa é apenas outra forma de downtime.

    Réplicas de leitura não resolvem tudo

    Separar leitura e escrita é eficiente quando há alto volume de consultas que toleram consistência eventual. Catálogos, históricos, dashboards e relatórios costumam se beneficiar bem dessa arquitetura. Já autorização de pagamento, saldo, estoque crítico e confirmação de pedido podem exigir leitura no primário ou mecanismos específicos de consistência.

    Enviar toda leitura para uma réplica sem entender o requisito funcional cria erros difíceis de reproduzir: o usuário conclui uma ação e não enxerga o resultado imediatamente; um processo toma decisão com dado defasado; uma rotina de fraude opera com uma visão incompleta. A escala precisa respeitar a semântica da transação, não apenas baixar o percentual de CPU do primário.

    Sharding merece cautela ainda maior. Ele pode ser necessário para volumes e taxas de escrita que ultrapassam os limites de um único nó, mas altera o modelo de operação. Consultas globais, chaves de distribuição desequilibradas, movimentação de tenants e recuperação de falhas se tornam problemas de engenharia permanentes. Antes de fragmentar dados, esgote otimização de queries, índices, particionamento, arquivamento e separação adequada das cargas de leitura.

    Teste o failover como se fosse produção

    Alta disponibilidade declarada em diagrama não protege uma empresa. O que protege é o failover testado, com evidência de tempo de recuperação, comportamento do aplicativo, integridade dos dados e execução previsível por pessoas diferentes.

    Simule perda do primário, indisponibilidade de zona, aumento abrupto de conexão e atraso de replicação. Verifique se alertas chegam ao time certo, se o runbook é suficiente e se a aplicação se recupera sem intervenção manual prolongada. O teste também revela dependências esquecidas, como jobs apontando para IP fixo, credenciais fora do cofre ou rotinas de backup concentradas em um único servidor.

    Esse exercício deve ser recorrente. Topologias mudam, versões mudam e equipes mudam. Um runbook que funcionou há um ano não é prova de prontidão atual.

    Governança é parte da disponibilidade

    Cada mudança precisa ter dono técnico, avaliação de impacto, janela compatível, critério de sucesso e trilha de auditoria. Em setores regulados ou sob exigências de LGPD, também é necessário controlar acesso privilegiado, retenção de logs e exposição de dados em réplicas, backups e ambientes de teste.

    A HTI Tecnologia trata escalabilidade como operação de produção, não como uma aposta em capacidade. Isso envolve DBA sênior, monitoramento 24/7, documentação viva e resposta objetiva quando os indicadores apontam risco. A meta não é apenas fazer o banco crescer. É manter a empresa operando enquanto ele cresce.

    O melhor momento para preparar a próxima escala é quando o ambiente ainda está estável. Quando a capacidade se torna uma emergência, as opções diminuem, o risco sobe e cada decisão passa a custar mais do que deveria.