DBAtlas · Атлас эксплуатации баз данных

Отставание / остановка репликации

Симптом

Standby/реплика отстаёт или полностью остановилась; реплики для чтения показывают устаревшие данные.

1. Каково отставание и растёт ли оно или стабильно

Каково отставание в секундах/байтах? Это постоянный сдвиг или он непрерывно растёт? Если растёт — реплика не успевает применять изменения; если стабилен — была кратковременная остановка.

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. Работает ли репликация, есть ли ошибки

Каково состояние потоков IO/SQL, процесса применения, не разорвано ли соединение? Если есть ошибка (например, конфликтующая строка, отсутствующая таблица), применение остановлено; прочитайте сообщение об ошибке.

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. Найдите узкое место

Почему реплика не успевает? Однопоточное применение плюс высокая нагрузка на запись (PG/MySQL в основном применяют последовательно), узкое место I/O на standby, сеть или длинный запрос, блокирующий применение (PG hot_standby_feedback / recovery conflict)?

4. Ликвидируйте отставание

Ускорьте применение: включите параллельное применение (MySQL replica_parallel_workers — slave_parallel_workers до 8.0.26; в PG его нет, но есть параметры восстановления), улучшите I/O на standby, устраните запрос, блокирующий применение. Если остановилось с ошибкой: исправьте ошибку (вручную разрешите конфликтующую строку) и возобновите репликацию.

5. Пересоздайте, если она сломана

Если реплика сильно отстала/сломана, чище всего пересинхронизировать: пересоздайте standby из свежего бэкапа (PG pg_basebackup, MySQL clone/xtrabackup, Oracle RMAN duplicate). Критично: найдите причину до пересоздания, иначе это повторится.

Открыть в DBAtlas →