Skip to content

Commit d34794f

Browse files
committed
Ignore recovery_min_apply_delay until recovery has reached consistent state
Previously recovery_min_apply_delay was applied even before recovery had reached consistency. This could cause us to wait a long time unexpectedly for read-only connections to be allowed. It's problematic because the standby was useless during that wait time. This patch changes recovery_min_apply_delay so that it's applied once the database has reached the consistent state. That is, even if the delay is set, the standby tries to replay WAL records as fast as possible until it has reached consistency. Author: Michael Paquier Reviewed-By: Julien Rouhaud Reported-By: Greg Clough Backpatch: 9.4, where recovery_min_apply_delay was added Bug: #13770 Discussion: http://www.postgresql.org/message-id/20151111155006.2644.84564@wrigleys.postgresql.org
1 parent 60690a6 commit d34794f

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

doc/src/sgml/recovery-config.sgml

+3-2
Original file line numberDiff line numberDiff line change
@@ -462,8 +462,9 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
462462
are not visible until the corresponding commit record is applied.
463463
</para>
464464
<para>
465-
The delay occurs until the standby is promoted or triggered. After that
466-
the standby will end recovery without further waiting.
465+
The delay occurs once the database in recovery has reached a consistent
466+
state, until the standby is promoted or triggered. After that the standby
467+
will end recovery without further waiting.
467468
</para>
468469
<para>
469470
This parameter is intended for use with streaming replication deployments;

src/backend/access/transam/xlog.c

+4
Original file line numberDiff line numberDiff line change
@@ -5715,6 +5715,10 @@ recoveryApplyDelay(XLogReaderState *record)
57155715
if (recovery_min_apply_delay <= 0)
57165716
return false;
57175717

5718+
/* no delay is applied on a database not yet consistent */
5719+
if (!reachedConsistency)
5720+
return false;
5721+
57185722
/*
57195723
* Is it a COMMIT record?
57205724
*

0 commit comments

Comments
 (0)