I did performance tests for the v99 patch w.r.t. wait time analysis. As this patch is introducing a wait for standby before sending changes to a subscriber, at the primary node, logged time at the start and end of the XLogSendLogical() call (which eventually calls WalSndWaitForWal()) and calculated total time taken by this function during the load run.
For load, ran pgbench for 15 minutes: Creating tables: pgbench -p 5833 postgres -qis 2 Running benchmark: pgbench postgres -p 5833 -c 10 -j 3 -T 900 -P 20 Machine details: 11th Gen Intel(R) Core(TM) i9-11950H @ 2.60GHz 32GB RAM OS - Windows 10 Enterprise Test setup: Primary node --> -> One physical standby node -> One subscriber node having only one subscription with failover=true -- the slot-sync relevant parameters are set to default (OFF) for all the tests i.e. hot_standby_feedback = off sync_replication_slots = false -- addition configuration on each instance is: shared_buffers = 6GB max_worker_processes = 32 max_parallel_maintenance_workers = 24 max_parallel_workers = 32 synchronous_commit = off checkpoint_timeout = 1d max_wal_size = 24GB min_wal_size = 15GB autovacuum = off To review the wait time impact with and without patch, compared three cases (did two runs for each case)- (1) HEAD code: time taken in run 1 = 103.935631 seconds time taken in run 2 = 104.832186 seconds (2) HEAD code + v99 patch ('standby_slot_names' is not set): time taken in run 1 = 104.076343 seconds time taken in run 2 = 103.116226 seconds (3) HEAD code + v99 patch + a valid 'standby_slot_names' is set: time taken in run 1 = 103.871012 seconds time taken in run 2 = 103.793524 seconds The time consumption of XLogSendLogical() is almost same in all the cases and no performance degradation is observed. -- Thanks, Nisha