Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Causas e soluções para latência de sincronização em instâncias somente leitura do RDS for MySQL

Última atualização: Aug 20, 2026

As instâncias somente leitura do RDS utilizam a replicação assíncrona ou semissíncrona nativa do MySQL, baseada em logs, para manter a sincronia com a instância primária. Esse mecanismo pode introduzir atrasos, causar inconsistências temporárias de dados ou esgotar a capacidade de armazenamento da instância somente leitura devido ao acúmulo de binary logs.

Se a instância primária do RDS gerar um grande volume de logs, as instâncias somente leitura associadas poderão ser bloqueadas.

Use este documento para interpretar métricas de latência de replicação, identificar a causa raiz e resolver o problema.

Como medir a latência de replicação

O campo Seconds_Behind_Master na saída do comando SHOW SLAVE STATUS \G informa a latência de replicação em segundos.

Fórmula de latência: Latência = Hora atual − Momento em que a transação aplicada na instância somente leitura foi confirmada (committed) na instância primária do RDS

Execute o seguinte comando na instância somente leitura para verificar o status atual da replicação:

SHOW SLAVE STATUS \G

Principais campos a analisar:

Campo

O que observar

Slave_IO_Running

Deve ser Yes. O valor No indica replicação interrompida.

Slave_SQL_Running

Deve ser Yes. O valor No indica replicação interrompida.

Seconds_Behind_Master

Latência de replicação em segundos. 0 significa que a instância somente leitura está sincronizada. NULL significa que a replicação não está ativa.

Exec_Master_Log_Pos

Se este valor permanecer inalterado enquanto Seconds_Behind_Master aumentar continuamente, a thread SQL estará travada em uma transação grande ou em uma operação DDL.

Last_IO_Error / Last_SQL_Error

Mensagens de erro da thread de I/O ou da thread SQL, se houver.

Latência <= 1 segundo: quando ignorar

Uma latência reportada de 1 segundo ou menos geralmente não indica um problema real. Dois motivos comuns explicam esse comportamento:

Granularidade de monitoramento. Se o intervalo de tempo de monitoramento estiver definido para mais de 6 minutos, a granularidade padrão pode chegar a 30 segundos. O valor exibido representa uma média desse intervalo, não uma leitura instantânea. Para obter uma leitura com granularidade de 1 segundo, acesse a aba Performance Trends no console do ApsaraDB RDS e defina o intervalo de tempo de monitoramento para menos de 6 minutos.

Amostragem entre segundos. Os pontos de amostragem são sempre arredondados para baixo até o segundo mais próximo. Se uma transação começar em um segundo e terminar no seguinte, o cálculo de latência informará 1 segundo, independentemente de o atraso real ser inferior a um segundo. A tabela abaixo ilustra esse comportamento:

Transação Hora do commit na primária Hora do commit na somente leitura Hora atual Latência reportada
Trx1 00:00:00,30 00:00:00,50 00:00:00,35 0(0,35) - 0(0,30) = 0 s
00:00:00,45 0(0,45) - 0(0,30) = 0 s
Trx2 00:00:00,90 00:00:01,10 00:00:00,95 0(0,95) - 0(0,90) = 0 s
00:00:01,05 1(1,05) - 0(0,90) = 1 s

Defina o limiar de alerta para latência de leitura como maior que 1 segundo para evitar alarmes falsos.

Latência > 1 segundo: identifique e corrija a causa

Uma latência sustentada superior a 1 segundo exige investigação. As seções a seguir abordam as cinco causas mais comuns, como confirmar cada uma delas e como resolvê-las.

Importante

Antes de alterar configurações — como modificar especificações da instância ou dados — crie um snapshot ou ative o backup de logs para proteger seus dados. Caso tenha concedido permissões sobre informações sensíveis ou enviado tais informações no Console de Gerenciamento da Alibaba Cloud, recomendamos modificar esses dados o mais rápido possível. Informações sensíveis incluem nomes de usuário e senhas.

Causa 1: Especificações da instância somente leitura insuficientes

O que acontece. A replicação utiliza uma thread de I/O (para buscar binary logs na primária) e uma thread SQL (para aplicá-los localmente). Ambas as threads competem por recursos de I/O, incluindo operações de entrada e saída por segundo (IOPS). Se a instância somente leitura não conseguir sustentar os IOPS necessários, ela ficará atrasada.

Como confirmar. No console do ApsaraDB RDS, acesse Monitoring and Alerts da instância somente leitura. Verifique se a utilização de CPU, uso de memória, largura de banda de I/O ou IOPS estão atingindo consistentemente seus limites. Visualize também o tipo da instância na seção Configuration Information da página Basic Information. Para mais informações, consulte Instance types for read-only ApsaraDB RDS for MySQL instances (x86) e Instance types for read-only ApsaraDB RDS for MySQL instances (ARM).

Como corrigir. Atualize a instância somente leitura para especificações iguais ou superiores às da instância primária. Para mais informações, consulte Change the specifications of an ApsaraDB RDS for MySQL instance.

Causa 2: Alto volume de transações por segundo (TPS) na instância primária

O que acontece. Uma única thread SQL aplica todas as transações replicadas na instância somente leitura de forma serial. Se a instância primária processar um alto volume de escritas simultâneas, a instância somente leitura não conseguirá acompanhar.

Como confirmar. Acesse a página Dashboard da instância primária ou somente leitura e verifique a métrica de TPS. Para mais informações, consulte Use the dashboard feature for an ApsaraDB RDS for MySQL instance.

Como corrigir. Otimize ou divida grandes transações na instância primária para reduzir o volume de escrita por transação e diminuir o tempo que cada transação ocupa a thread SQL.

Causa 3: Transações grandes na instância primária

O que acontece. Operações como UPDATE, DELETE, INSERT...SELECT e REPLACE...SELECT em grandes volumes de dados geram entradas extensas nos binary logs. A instância somente leitura precisa gastar o mesmo tempo aplicando a transação que a primária gastou executando-a. Por exemplo, uma exclusão que leva 80 segundos na primária também levará 80 segundos para ser replicada.

Além disso, embora haja suporte a transações concorrentes em múltiplas tabelas, apenas uma thread replica transações em uma determinada tabela por vez, o que pode agravar o atraso.

Como confirmar. Execute SHOW SLAVE STATUS \G na instância somente leitura e observe se Seconds_Behind_Master aumenta continuamente enquanto Exec_Master_Log_Pos permanece inalterado. Em seguida, execute SHOW PROCESSLIST para identificar a thread SQL específica. Se o formato do binary log estiver definido como ROW, verifique se algum arquivo de binary log excede o limiar de max_binlog_size:

SHOW BINARY LOGS;

Se File_size exceder max_binlog_size, é provável que transações grandes sejam a causa.

Verifique também se há contenção de metadata lock (MDL) examinando a saída de SHOW SLAVE STATUS \G em busca de estados de espera por locks.

Como corrigir. Divida transações grandes em lotes menores. Por exemplo, adicione uma cláusula WHERE com limite de linhas aos comandos DELETE para que cada lote processe uma quantidade gerenciável de linhas, permitindo que a instância somente leitura acompanhe o ritmo.

Causa 4: DDL de longa duração na instância primária

O que acontece. A replicação aplica comandos de Data Definition Language (DDL) de forma serial. Uma operação DDL em uma tabela grande — como CREATE INDEX, ALTER TABLE ADD COLUMN ou REPAIR TABLE — pode bloquear toda a replicação subsequente até sua conclusão. Queries lentas que geram um grande número de tabelas temporárias agravam o problema ao consumir I/O de disco.

Separadamente, queries em andamento ou transações abertas na instância somente leitura podem criar contenção de MDL que bloqueia comandos DDL vindos da primária.

Como confirmar.

  • Verifique se os arquivos de binary log estão acumulando sem serem truncados, o que indica um backlog de DDL.

  • Execute o seguinte comando na instância somente leitura para verificar se há contenção de locks:

    SHOW ENGINE INNODB STATUS \G
  • Execute o seguinte comando para identificar tabelas atualmente em uso:

    SHOW OPEN TABLES;

    Tabelas com in_use = 1 estão bloqueadas e podem estar impedindo a replicação.

  • Revise os logs de queries lentas em busca de operações relacionadas a DDL, como OPTIMIZE, ALTER, REPAIR e CREATE. Para mais informações, consulte Slow query log analysis.

Como corrigir.

Se um comando DDL da primária estiver bloqueado por um metadata lock na instância somente leitura:

  1. Execute SHOW PROCESSLIST; na instância somente leitura para encontrar a thread SQL aguardando um metadata lock.

  2. Encerre a sessão que detém o lock para retomar a replicação. Para mais informações, consulte Use DMS to release metadata locks.

Causa 5: Tabela com índice único, mas sem chave primária

O que acontece. Quando uma tabela não possui chave primária e tem apenas um índice único contendo valores NULL, a thread SQL de replicação usa o plano de execução do índice único em vez do plano preferido pelo otimizador — mesmo que uma cláusula WHERE permita uma busca mais eficiente. Isso força varreduras completas na tabela durante a replicação, aumenta significativamente as leituras lógicas e desacelera a thread SQL.

Como confirmar. Execute a seguinte query na instância primária para identificar tabelas sem chave primária:

SELECT tab.table_schema AS database_name, tab.table_name
FROM information_schema.tables tab
LEFT JOIN information_schema.table_constraints tco
  ON tab.table_schema = tco.table_schema
  AND tab.table_name = tco.table_name
  AND tco.constraint_type = 'PRIMARY KEY'
WHERE tco.constraint_type IS NULL
  AND tab.table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')
  AND tab.table_type = 'BASE TABLE'
ORDER BY tab.table_schema, tab.table_name;

Para as tabelas retornadas pela query, use a view sys.schema_index_statistics para confirmar se o índice único contém valores NULL.

Como corrigir. Adicione uma chave primária explícita a qualquer tabela que não possua uma.

FAQ

Por que uma latência de 1 segundo aparece em algumas instâncias somente leitura, mas não em outras?

Cada instância somente leitura inicia seus procedimentos de coleta em momentos ligeiramente diferentes. Se um ponto de amostragem coincidir com a virada de um segundo, uma latência de 1 segundo será reportada; caso contrário, a latência aparecerá como 0 segundos. Trata-se de um artefato de medição, não de uma diferença real no desempenho da replicação. Para detalhes, consulte Latency <= 1 second: when to ignore it.

Uma latência de 1 segundo significa que minha instância está afetada?

Não. Uma latência reportada de 1 segundo não significa que ocorreu um atraso real. O valor reflete o arredondamento do cálculo, e não um atraso genuíno de sincronização. Defina o limiar de latência de leitura do seu proxy ou alerta como maior que 1 segundo para filtrar esses falsos positivos.

O que fazer quando o erro ReplicationInterrupted é exibido ou quando um alerta Slave_SQL_Running ou Slave_IO_Running é acionado?

Verifique os itens abaixo nesta ordem:

  1. Capacidade de armazenamento. Se a instância somente leitura ficar sem espaço de armazenamento, ela não poderá gravar os binary logs recebidos. Verifique o uso de armazenamento na seção Usage Statistics da página Basic Information.

  2. Latência de replicação. Se a latência exceder continuamente 5 segundos dentro de uma janela de 5 minutos, um alerta será acionado. Alto volume de escrita ou transações grandes na primária são as causas mais prováveis. Para visualizar a latência atual, acesse Monitoring and Alerts > Standard Monitoring e verifique a métrica Replication Latency of Secondary Instances(second).

  3. Logs de queries lentas. Queries lentas na instância somente leitura degradam o desempenho da thread SQL e podem amplificar o atraso de replicação. Verifique os logs em Logs > Slow Query Logs ou acesse Autonomy Services > Slow Query Logs.

Se nenhuma das opções acima se aplicar, o sistema detectará e resolverá automaticamente a interrupção da replicação.