🛠️ Реплика PostgreSQL отстаёт на 20 минут. Отчёты показывают старые данные, а на primary нагрузка выглядит обычной.

Первая версия часто звучит так: «Наверное, сеть».

Но replication lag — это не одна причина, а несколько участков пути WAL.

Условный фрагмент pg_stat_replication на primary:

replica: reports_replica state: streaming

sent: 7/B900010 write: 7/B8FF900 flush: 7/B8FF900 replay: 7/B7A1200

replay_lag: 00:20:14

state = streaming показывает, что поток репликации активен. Но это ещё не значит, что standby успевает применять все изменения.

Как читать развилку: — если sent_lsn отстаёт от текущего WAL на primary, смотрим генерацию WAL и отправку потока; — если write_lsn или flush_lsn отстают от sent_lsn, проверяем доставку, диск и нагрузку на standby; — если write_lsn и flush_lsn близки к sent_lsn, а replay_lsn заметно позади, WAL уже записан на standby, но его применение отстаёт.

Отдельный слой — долгие запросы на hot standby. Они могут конфликтовать с recovery и задерживать replay в пределах настроек. Но это не повод автоматически отменять отчёты: сначала нужно понять последствия для пользователей и свежести данных.

Практический порядок проверки: Разделить lag по этапам: отправка, запись, flush, replay. Проверить генерацию WAL на primary. Посмотреть доставку до standby. Проверить диск, CPU и I/O на реплике. Найти долгие запросы на standby и оценить, конфликтуют ли они с recovery. Проверить настройки hot standby, но не менять их вслепую.

Практический вывод: «реплика отстаёт» — это не диагноз. Сначала нужно понять, где появился разрыв: WAL не отправляется, не доходит, не записывается или не применяется.

Сохраните порядок проверки, чтобы не искать проблему только в сети.

🔹🔹🔹🔹

🛠️ Реплика PostgreSQL отстаёт на 20 минут. Отчёты показывают старые данные, а на primary нагрузка выглядит обычной.
Первая версия часто звучит так: «Наверное, сеть» | Сетка — социальная сеть от hh.ru