recovery_min_apply_delay

类型: integer
默认: 0 (0ms)
最低限度: 0 (0ms)
最大: 2147483647 (2147483647ms)
单元: milliseconds (ms)
上下文: sighup
重新开始: false
以来: 12

默认情况下,后备服务器会尽快恢复来自于发送服务器的 WAL 记录。有一份数据的延时拷贝是有用的,它能提供机会纠正数据丢失错误。 这个参数允许你将恢复延迟一段指定的时间量。 例如,如果你设置这个参数为5min,对于一个事务提交,只有当后备机上的系统时钟超过主服务器报告的提交时间至少 5分钟时,后备机才会重放该事务。 如果指定值时没有单位,则以毫秒为单位。默认为0,不增加延迟。

有可能服务器之间的复制延迟会超过这个参数的值,在这种情况下则不会增加延迟。 注意延迟是根据主服务器上写 WAL 的时间戳以及后备机上的当前时间来计算。 由于网络延迟或者级联复制配置导致的传输延迟可能会显著地减少实际等待时间。 如果主服务器和后备机上的系统时钟不同步,这会导致恢复比预期的更早应用记录。 但这不是一个主要问题,因为这个参数有用的设置比服务器之间的典型事件偏差要大得多。

只有在事务提交的 WAL 记录上才会发生延迟。其他记录还是会被尽可能快地重放,这不会成为问题,因为 MVCC 可见性规则确保了在对应的提交记录被应用之前它们的效果不会被看到。

一旦恢复中的数据库已经达到一致状态,延迟就会产生,直到后备机被提升或者触发。在那之后,后备机将会结束恢复并且不再等待。

这个参数的目的是和流复制部署一起使用,但是,如果指定了该参数,除了崩溃恢复之外所有的情况下都会遵守它。 使用这个特性也会让hot_standby_feedback被延迟,这可能导致主服务器的膨胀,两者一起使用时要小心。

synchronous_commit被设置为remote_apply时,同步复制会受到这个设置的影响,每一个COMMIT都需要等待被应用。

这个参数只能在postgresql.conf文件中或在服务器命令行中设置。

条评论