Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Otimização de atraso na replicação DDL

Última atualização: Aug 25, 2026

Instruções DDL de longa duração — como ALTER TABLE em tabelas grandes — podem paralisar um banco de dados secundário por centenas de segundos enquanto ele aguarda a conclusão e o commit do primário. A replicação em tempo real de binlog (BRR) elimina esse atraso ao fazer com que o primário notifique o secundário para iniciar a execução da instrução DDL em paralelo, em vez de esperar pelo sinal de commit. Em testes de benchmark com uma tabela de 80 milhões de linhas e 23 GB, o secundário apresentou 277 segundos de atraso de replicação sem BRR e zero atraso com o BRR ativado.

Como funciona

O MySQL utiliza replicação lógica: após o commit de uma transação no banco de dados primário, o evento binlog resultante é enviado ao secundário para reprodução. Para instruções DDL, o payload do binlog é pequeno (um Gtid_log_event e um Query_log_event), portanto o tempo de transmissão é insignificante. O gargalo reside no próprio tempo de execução da DDL — o secundário não pode iniciar até que o primário faça o commit.

Standard DDL replication flow

O BRR resolve essa questão na source. Quando o primário inicia uma instrução DDL, ele envia imediatamente um evento binlog Brr — um novo tipo de evento introduzido por este recurso — ao secundário via transmissão em tempo real. O secundário começa a executar a DDL em paralelo usando threads Brr Worker dedicadas, independentes das Worker threads padrão do MySQL. Assim que o secundário conclui a maior parte do trabalho da DDL, ele aguarda o resultado do primário:

  • Se o primário for bem-sucedido, ele sinaliza ao secundário para efetuar o commit.

  • Se o primário falhar, ele sinaliza ao secundário para reverter a operação.

O atraso total de replicação reduz-se a uma transmissão de rede para o banco de dados secundário mais o tempo de commit da DDL — geralmente dezenas de milissegundos.

BRR parallel DDL replication flow

O evento binlog Brr não é gravado no binlog nem no relay log, portanto não afeta sistemas downstream que consomem logs binários.

Pré-requisitos

Antes de ativar o BRR, verifique se:

Instruções DDL compatíveis

As instruções DDL abrangidas pelo BRR dependem da sua versão secundária do mecanismo:

Versão secundária do mecanismo

Instruções compatíveis

20250731 ou posterior

ALTER TABLE

20251031 ou posterior

ALTER TABLE e OPTIMIZE TABLE

Ative o BRR

Defina os seguintes parâmetros nos bancos de dados primário e secundário ao definir parâmetros da instância. As alterações entram em vigor imediatamente — não é necessário reiniciar a instância.

Banco de dados primário

Parâmetro

Descrição

Padrão

loose_binlog_realtime_apply_ddl_source_enabled

Defina como ON para ativar o BRR no primário.

loose_binlog_realtime_ddl_time_limit

O BRR aplica-se apenas a instruções DDL cujo tempo de execução exceda este limiar (em milissegundos). N é um número inteiro maior ou igual a 0.

1000

Banco de dados secundário

Parâmetro

Descrição

Padrão

loose_binlog_realtime_apply_workers

Quantidade de threads Brr Worker no secundário. Deve ser um número inteiro maior ou igual a 1.

Resultados de benchmark

O teste abaixo utilizou uma única tabela com 80.000.000 registros (23 GB) e executou ALTER TABLE sbtest1 ENGINE=InnoDB para reconstruí-la. O primário executou a DDL às 16:21:35 e novamente às 16:32:50. A instância de teste usava a versão secundária do mecanismo 20251031.

BRR ativado

Atraso de replicação do secundário

Não

277 segundos

Sim

0 segundos

Benchmark results showing replication delay with and without BRR