Как можно посчитать задержку репликации master-slave. postgres 9.2.7?
Как можно посчитать задержку репликации master-slave в postgres?
Величину лага я получаю, но эта величина достаточно абстрактна, хотелось бы получить именно время задержки.
pg_last_xact_replay_timestamp - это "time stamp of last transaction replayed during recovery.", или же время последней накаченной транзакции, а если мастер не совершает никаких транзакций то и накатываться нечему, а разница во времени растёт и показывает большой лаг, хотя его на самом деле нет
Мхм. Есть один универсальный способ для всех баз.
В отдельную таблицу на мастере каждую секунду-пять-десять (в зависимости от нужной погрешности и нагрузки) писать текущее время. А на реплике проверять, насколько эта таблица отстаёт от реального времени.
у меня чуть похожий вариант, bash функция
function sr_monitor92 { watch -n ${1:-5} "psql -h 127.0.0.1 -U postgres -c 'select pid,usesysid,application_name,client_addr,backend_start,state,sent_location,write_location,replay_location,sync_state,pg_xlog_location_diff(sent_location, replay_location) as bytes from pg_stat_replication order by 5'"; }