DBAtlas · Atlas de operações de banco de dados

Lag de replicação / replicação parada

Sintoma

O standby/réplica está ficando para trás ou parou completamente; as réplicas de leitura mostram dados desatualizados.

1. Qual o tamanho do atraso, e ele está crescendo ou estável

Qual é o atraso em segundos/bytes? É uma defasagem estável ou cresce continuamente? Se cresce, a réplica não acompanha a aplicação; se está estável, houve uma parada momentânea.

Oracle

SELECT name, value, unit FROM v$dataguard_stats WHERE name LIKE '%lag%';

PostgreSQL

SELECT client_addr, state, write_lag, flush_lag, replay_lag FROM pg_stat_replication;

MySQL

SHOW REPLICA STATUS\G  -- Seconds_Behind_Source

SQL Server

SELECT ar.replica_server_name, drs.redo_queue_size, drs.log_send_queue_size FROM sys.dm_hadr_database_replica_states drs JOIN sys.availability_replicas ar ON drs.replica_id=ar.replica_id;

Redis

INFO replication  # master_repl_offset vs slave offset

2. A replicação está rodando, há erros

Qual é o estado das threads IO/SQL, do processo de aplicação, a conexão caiu? Se houver um erro (ex.: linha conflitante, tabela ausente), a aplicação parou; leia a mensagem de erro.

MySQL

SHOW REPLICA STATUS\G  -- Replica_IO_Running / Replica_SQL_Running / Last_Error

PostgreSQL

SELECT status, last_msg_receipt_time, latest_end_lsn FROM pg_stat_wal_receiver;  -- on the standby

Oracle

SELECT process, status, sequence#, thread# FROM v$managed_standby WHERE process LIKE 'MRP%' OR process LIKE 'RFS%';

3. Encontre o gargalo

Por que não consegue acompanhar? Aplicação em thread única mais uma carga pesada de escrita (PG/MySQL aplicam majoritariamente em série), um gargalo de I/O no standby, a rede, ou uma consulta longa bloqueando a aplicação (PG hot_standby_feedback / recovery conflict)?

4. Feche o atraso

Acelere a aplicação: ative a aplicação paralela (MySQL replica_parallel_workers — slave_parallel_workers antes da 8.0.26; o PG não tem, mas há configurações de recovery), melhore o I/O do standby, resolva a consulta que bloqueia a aplicação. Se parou com erro: corrija o erro (resolva a linha conflitante manualmente) e retome a replicação.

5. Reconstrua se estiver quebrada

Se a réplica estiver muito atrasada/quebrada, ressincronizar é o mais limpo: reconstrua o standby a partir de um backup recente (PG pg_basebackup, MySQL clone/xtrabackup, Oracle RMAN duplicate). Crítico: descubra a causa antes de reconstruir, ou vai acontecer de novo.

Abrir no DBAtlas →