Отставание / остановка репликации
Симптом
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_SourceSQL 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 offset2. Работает ли репликация, есть ли ошибки
Каково состояние потоков IO/SQL, процесса применения, не разорвано ли соединение? Если есть ошибка (например, конфликтующая строка, отсутствующая таблица), применение остановлено; прочитайте сообщение об ошибке.
MySQL
SHOW REPLICA STATUS\G -- Replica_IO_Running / Replica_SQL_Running / Last_ErrorPostgreSQL
SELECT status, last_msg_receipt_time, latest_end_lsn FROM pg_stat_wal_receiver; -- on the standbyOracle
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). Критично: найдите причину до пересоздания, иначе это повторится.