We use PostgreSQL 9.5 in a master + synchronous hot-standby setup, i.e., using synchronous_commit = on
and using synchronous_standby_names='*'
.
Consequently, the standby has sync_state = sync
in the master's pg_stat_replication_table
.
We also use postgres_exporter, which uses the following statement to extract the system's replication lag from the master's stats.
SELECT *, pg_current_xlog_location(),
pg_xlog_location_diff(pg_current_xlog_location(), replay_location)::float
FROM pg_stat_replication;
Question: Does the above call to pg_xlog_location_diff
always return 0
in a synchronous setup, or are there any cases when there is a measurable replication lag?
To my understanding, if the above statement shows a lag, it means that the master has committed a transaction without waiting for the standby, which should never happen in a synchronous setup.
Note that we moreover use replication slots, have setup the cluster using repmgr
, and do not override synchronous_commit
locally for individual transactions.