预写式日志(WRITE-AHEAD LOG)类别参数
本文档介绍了系统配置参数中 预写式日志类别的相关参数。
注意!
为确保系统稳定与安全,请务必谨慎手动修改相关参数。
设置
commit_delay
在一次 WAL 刷写被发起之前,commit_delay
增加一个时间延迟(以微秒为单位)。
- 如果系统负载足够高,使得在一个给定间隔内有额外的事务准备好提交,那么通过允许更多事务通过一个单次 WAL 刷写来提交能够提高组提交的吞吐量。但是,它也会增加每次 WAL 刷写的延迟,最多可达
commit_delay
。 因为如果没有其他事务准备好提交,就会浪费一次延迟,只有在当一次刷写将要被发起时有至少commit_siblings
(见下文) 个其他活动事务时,才会执行一次延迟。 - 另外,如果
fsync
被禁用,则将不会执行任何延迟。 - 以微秒(microsecond,μs)作为单位。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ 100000 | master;session;reload;superuser |
commit_siblings
在执行 commit_delay
延迟时,要求的并发活动事务的最小数目。
- 大一些的值会导致在延迟间隔期间更可能有至少另外一个事务准备好提交。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 5 | 0 ~ 1000 | master;session;reload |
full_page_writes
当这个参数为 on
时,YMatrix 服务器在一个检查点(Checkpoint)之后,在页面的第一次修改期间会将每个页面的全部内容写到 WAL 中。
- 这么做是因为在操作系统崩溃期间正在处理的一次页写入可能只有部分完成,从而导致在一个磁盘页面中混合有新旧数据。在崩溃后的恢复期间,通常存储在 WAL 中的行级改变数据不足以完全恢复这样一个页面。
- 存储完整的页面映像可以保证页面被正确存储,但代价是增加了必须被写入 WAL 的数据量(因为 WAL 的重放总是从一个检查点开始,所以在检查点后每个页面的第一次修改期间这样做就足够了。因此,一种减小全页面写开销的方法是增加检查点间隔参数值)。
- 把这个参数关闭会加快正常操作,但是在系统失败后可能导致不可恢复的数据损坏,或者静默的数据损坏。其风险类似于关闭
fsync
, 但是风险较小。并且只有在可关闭fsync
的情况下才应该关闭它。 - 关闭这个选项并不影响用于时间点恢复(PITR)的 WAL 归档使用。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | segments;system;reload |
fsync
如果打开这个参数,YMatrix 服务器将尝试确保更新被物理地写入到磁盘,做法是发出 fsync()
系统调用或者使用多种等价的方法(见下文 wal_sync_method
)。这保证了数据库集簇在一次操作系统或者硬件崩溃后能恢复到一个一致的状态。
- 虽然关闭 fsync 常常可以得到性能上的收益,但当发生断电或系统崩溃时可能造成不可恢复的数据损坏。因此,只有在能很容易地从外部数据中重建整个数据库时才建议关闭 fsync。
- 能安全关闭 fsync 的环境的例子包括从一个备份文件中初始加载一个新数据库集簇、使用一个数据库集簇来在数据库被删掉并重建之后处理一批数据,或者一个被经常重建并却不用于失效备援的只读数据库克隆。单独的高质量硬件不足以成为关闭 fsync 的理由。
- 当把 fsync 从关闭改成打开时,为了可靠的恢复,需要强制在内核中的所有被修改的缓冲区进入持久化存储。这可以在多个时机来完成:在集簇被关闭时或在 fsync 因为运行
initdb --sync-only
而打开时、运行 sync 时、卸载文件系统时或者重启服务器时。 - 在很多情况下,为不甚重要的事务关闭 synchronous_commit 可以提供很多潜在性能收益,且无数据损坏风险。
- 如果你关闭这个参数,请也考虑关闭
full_page_writes
(见上文)。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | segments;system;reload |
synchronous_commit
指定同步级别。即在命令返回 success
指示给客户端之前,一个事务是否需要等待 WAL 记录被写入磁盘。
- 默认的并且安全的设置是
on
。当设置为off
时,在向客户端报告成功和真正保证事务不会被服务器崩溃威胁之间会有延迟(最大的延迟是wal_writer_delay
的三倍)。不同于 fsync,将这个参数设置为off
不会产生数据库不一致性的风险:一个操作系统或数据库崩溃可能会造成一些最近已提交的事务丢失,但数据库状态与这些事务已经被完全中止是一样的。因此,当性能比完全确保事务的持久性更重要时,关闭synchronous_commit
可以作为一个有效的代替手段。 - 如果 synchronous_standby_names 为非空,这个参数也控制事务提交行为:是否将先等待它们的 WAL 记录被复制到 Standby 服务器上再提交。
- 当这个参数被设置为
on
时,直到当前同步的 Standby 服务器收到事务提交记录的回复,并将其刷入了磁盘,主服务器上的事务才会提交。这保证事务将不会被丢失,除非主服务器和所有同步 Standby 的数据库存储均出现损坏。 - 当被设置为
remote_apply
时,提交将会等待,直到来自当前的同步 Standby 的回复指示它们已经收到了该事务的提交记录并且已经应用了该事务,该事务才会对 Standby 上的查询可见。 - 当这个参数被设置为
remote_write
时,提交将等待,直到来自当前的同步后备的回复指示它们已经收到了该事务的提交记录并且已经把该记录写出到其操作系统。这种设置足以保证数据在 Standby 服务器的 YMatrix 实例崩溃时得以保存,但是不能保证 Standby 服务器遭受操作系统级别崩溃时数据能被保存,因为数据不一定必须要在 Standby 机上达到稳定存储。 - 最后,设置
local
会导致提交等待本地刷写到磁盘而不是复制完成。在使用同步复制时这通常不是我们想要的效果,但是为了完整性,还是提供了这样一个选项。 - 如果
synchronous_standby_names
为空,设置on
、remote_apply
、remote_write
和local
都提供了同样的同步级别:事务提交只等待本地刷写磁盘。
参数值 | 本地持久性提交 | YMatrix 崩溃后 Standby 持久性提交 | 操作系统崩溃后 Standby 持久性提交 | Standby 查询一致性 |
---|---|---|---|---|
remote_apply | Y | Y | Y | Y |
on | Y | Y | Y | |
remote_write | Y | Y | ||
local | Y | |||
off |
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | on | on / off / true / false / yes / no / 1 / 0 / remote_apply / remote_write / local | segments;session;reload |
wal_buffers
用于还未写入磁盘的 WAL 数据的共享内存量(以 WAL 块作为单位,即为 XLOG_BLCKSZ 字节)。
- 默认值
-1
选择等于 shared_buffers 的 1/32 的尺寸(大约 3%),但是不小于64KB
也不大于 WAL 段的尺寸(通常为16MB
)。 - 如果自动的选择太大或太小可以手工设置该值,但是任何小于
32KB
的正值都将被当作32KB
。 - 在每次事务提交时,WAL 缓冲区的内容都会被写出到磁盘,因此极大的
wal_buffers
值是不可能提供显著的收益的。不过,把这个值设置为几个兆字节可以在一个繁忙的服务器(其中很多客户端会在同一时间提交)上提高写性能。 - 由默认设置
-1
选择的自动调节在绝大部分情况下都可得到合理的结果。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | -1 | -1 ~ INT_MAX/XLOG_BLCKSZ | segments;system;restart |
wal_compression
允许全页写的压缩操作。
- 当这个参数为
on
时,如果full_page_writes
也为on
或者处于基础备份期间,YMatrix 服务器会压缩写入到 WAL 中的完整页面镜像。压缩页面镜像将在 WAL 重放时被解压。 - 打开这个参数可以减小 WAL 所占的空间,且无需承受不可恢复的数据损坏风险。但是代价是需要额外的 CPU 开销以便在 WAL 记录期间进行压缩以及在 WAL 重放时解压。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | segments;session;reload;superuser |
wal_init_zero
当此参数被设置为 on
,则会以 0 填充新的 WAL 文件。
- 在一些文件系统中,这确保了在我们需要写入 WAL 记录前文件空间是被分配好的。
- 不过,Copy-On-Write(COW)文件系统可能并不能从此参数设置中获益,因此此参数会跳过不必要的工作。
- 如果设置为
off
,当文件被创建时只有最后的字节会被写入,因此它会拥有一个预期的尺寸。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | segments;session;reload;superuser |
wal_level
此参数决定多少信息写入到 WAL 中。
- 默认值是
replica
,它会写入足够的数据以支持 WAL 归档和复制,包括在后备服务器上运行只读查询。minimal
会去掉除从崩溃或者立即关机中进行恢复所需的信息之外的所有记录。最后,logical
会增加支持逻辑解码所需的信息。每个层次包括所有更低层次记录的信息。 - 在
minimal
级别中,某些批量操作的 WAL 日志可以被安全地跳过,这可以使那些操作更快。这种优化可以应用的操作包括:CREATE TABLE AS
、CREATE INDEX
、CLUSTER
、COPY
到在同一个事务中被创建或截断的表中。 - 但最少的 WAL 不会包括足够的信息来从基础备份和 WAL 日志中重建数据,因此,要启用 WAL 归档(archive_mode)和流复制,必须使用
replica
或更高级别。 - 在
logical
层,与replica
相同的信息会被记录,外加的信息需要允许从 WAL 抽取逻辑修改集获取。使用级别logical
将增加 WAL 容量,特别是如果为了REPLICA IDENTITY FULL
配置了很多表并且执行了很多UPDATE
和DELETE
语句时。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | replica | replica / minimal / logical | segments;system;restart |
wal_log_hints
对非关键更新同样执行全页写操作。
- 当这个参数为
on
时,YMatrix 服务器会在一个检查点之后,在页面被第一次修改期间把该磁盘页面的全部内容都写入 WAL,即使对所谓的提示位做非关键修改时也会这样做。 - 如果启用了数据校验,同时提示位更新总是会被 WAL 记录,并且这个设置会被忽略。你可以使用这个设置测试如果你的数据库启用了数据校验会有多少额外的 WAL 记录发生。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | segments;system;restart |
wal_recycle
循环利用 WAL 文件。
- 当此参数被设置为
on
,WAL 文件会以重命名的方式被循环利用,以避免创建新的文件。 - 在 COW 文件系统中,创建新文件可能会更快,所以此参数会自动禁用。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | segments;session;reload;superuser |
wal_sync_method
用来向强制 WAL 更新到磁盘的方法。
- 如果 fsync 是关闭的,那么这个设置就不相关,因为 WAL 文件更新将根本不会被强制。可能的值是:
open_datasync
(用open()
选项O_DSYNC
写 WAL 文件)、fdatasync
(在每次提交时调用fdatasync()
)、fsync
(在每次提交时调用fsync()
)、fsync_writethrough
(在每次提交时调用fsync()
,强制任何磁盘写高速缓存的直通写)、open_sync
(用open()
选项O_SYNC
写 WAL 文件) open_*
选项也可以使用O_DIRECT
(如果可用)。- 不是在所有平台上都能使用所有这些选择。默认值是列表中第一个被平台支持的选项。默认值不一定是最理想的;有可能需要修改这个设置或系统配置的其他方面来创建一个崩溃-安全的配置,或达到最佳性能。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | fsync / fdatasync(default on Linux) | open_datasync / fdatasync / fsync / fsync_writethrough / open_sync | segments;system;reload |
wal_writer_delay
指定 WAL 写入器刷写 WAL 的频繁程度,以时间(ms)为单位。
- 在刷写 WAL 之后,写入器将根据
wal_writer_delay
所给出的时间长度进行睡眠(除非被一个异步提交的事务提前唤醒)。 - 如果最近的刷写发生在
wal_writer_delay
之前,并且小于wal_writer_flush_after
WAL 的值产生之后,那么 WAL 只会被写入操作系统,而不会被刷写到磁盘。 - 注意:在很多系统上,有效的睡眠延迟粒度是 10 毫秒。把
wal_writer_delay
设置为一个不是 10 的倍数的值,其效果和把它设置为大于该值的下一个 10 的倍数产生的效果相同。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 200 | 1 ~ 10000 | segments;system;reload |
wal_writer_flush_after
指定 WAL 写入器刷写 WAL 的频繁程度(以 WAL块 作为单位,即为 XLOG_BLCKSZ 字节)。
- 如果最近的刷写发生在
wal_writer_delay
之前,并且小于wal_writer_flush_after
WAL 的值产生之后,那么 WAL 只会被写入操作系统,而不会被刷写到磁盘。 - 如果
wal_writer_flush_after
被设置为0
,则 WAL 数据总是会被立即刷写。 - 如果指定值时没有单位,则以 WAL块 作为单位,即为 XLOG_BLCKSZ 字节,通常为 8kB。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 1048576/XLOG_BLCKSZ | 0 ~ INT_MAX | segments;system;reload |
检查点(Checkpoints)
checkpoint_completion_target
检查点目标时长。
- 指定检查点完成的目标,作为检查点之间总时间的一部分。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
floating point | 0.5 | 0.0 ~ 1.0 | segments;system;reload |
checkpoint_flush_after
当执行检查点时写入的数据量超过此参数(以 BLOCKS 为单位)时,就尝试强制操作系统(OS)把这些写发送到底层存储。
- 这样做将会限制内核页面高速缓存中的脏数据数量,降低在检查点末尾发出
fsync
或者 OS 在后台大批量写回数据时被卡住的可能性。 - 这样常常会导致大幅度压缩的事务延迟,但是也有一些情况(特别是负载超过 shared_buffers 但小于 OS 页面高速缓存)的性能会降低。
- 这种设置可能会在某些平台上没有效果。
- 当此值为
0
,则禁用强制写回。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ 256 | segments;system;reload |
checkpoint_timeout
自动 WAL 检查点之间的最长时间(以秒为单位)。
- 增加这个参数的值会增加崩溃恢复所需的时间。
- 取值范围为
30 ~ 86400
(即 60天)。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 300 | 30 ~ 86400 | segments;system;reload |
checkpoint_warning
如果由于填充 WAL 段文件导致的检查点之间的间隔低于这个参数表示的时间量(s),那么就向服务器日志写一个消息(意味着应增加 max_wal_size
的值)。
- 设置为
0
则关闭警告。如果checkpoint_timeout
低于此参数的值,则不会有警告产生。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 30 | 0 ~ INT_MAX | segments;system;reload |
max_wal_size
在自动 WAL 检查点之间允许 WAL 增长到的最大尺寸(以 MB 为单位)。
- 这是一个软限制,在特殊的情况下 WAL 尺寸可能会超过
max_wal_size
,例如在重度负荷下、archive_command
失败或者高的wal_keep_segments
设置。 - 增加这个参数可能导致崩溃恢复所需的时间变长。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 4096 | 2 ~ INT_MAX/1024 | segments;system;reload |
min_wal_size
在自动 WAL 检查点之间允许 WAL 的最小尺寸(MB)。
- 只要 WAL 磁盘用量保持在这个设置之下,在检查点时旧的 WAL 文件总是被回收以便未来使用,而不是直接被删除。
- 这可以被用来确保有足够的 WAL 空间被保留来应付 WAL 使用的高峰,例如运行大型的批处理任务。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 320 | 2 ~ INT_MAX/1024 | segments;system;reload |
归档(Archiving)
archive_command
用于归档一个完成 WAL 文件的 Segment 的本地 shell 命令。
- 字符串中的任何
%p
占位符需要被替换成要 被归档文件的路径,而%f
需要替换为文件名(路径为集群的数据目录)。如果要在命令里嵌入一个真正的%
字符,可以使用%%
。例如:'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
- 注意:该命令只在成功时返回一个
0
作为退出状态。 - 除非服务器启动时启用了
archive_mode
,否则它会被忽略。如果archive_mode
被启用时,archive_command
是一个空字符串(默认),WAL 归档会被临时禁用,但服务器仍会继续累计 WAL 段文件,期待着一个命令被提供。 - 将
archive_command
设置为一个只返回 true 但不做任何操作的命令(例如/bin/true
或 Windows 上的REM
)实际上会禁用归档,也会打破归档恢复所需的 WAL 文件链,因此只有在极少数情况下才能用。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;reload |
archive_mode
当启用 archive_mode
时,可以通过设置 archive_command
命令将完成的 WAL 段发送到归档存储。
- 除用于禁用的
off
之外,还有两种模式:on
和always
。在普通操作期间,这两种模式之间没有区别,但是当设置为always
时,WAL 归档器在归档恢复或者后备模式下也会被启用。在always
模式下,所有从归档恢复的或者用流复制传来的文件将被(再次)归档。 archive_mode
和archive_command
是独立的变量,这样可以在不影响归档模式的前提下修改archive_command
。- 当
wal_level
(见上文) 被设置为minimal
时,archive_mode
不能被启用。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | off | off / on / always | segments;system;restart |
archive_timeout
在超过此参数值时间量(以秒为单位)后,强制切换到一个新的 WAL 段文件。
archive_command
仅在已完成的 WAL 段上调用。因此,如果你的服务器只产生很少的 WAL 流量(或产生流量的周期很长),那么在事务完成和它被安全地记录到归档存储之间将有一个很长的延迟。为了限制未归档数据存在的时间,你可以设置archive_timeout
来强制服务器来周期性地切换到一个新的 WAL 段文件。- 当此参数被设置为大于 0 时,只要从上次段文件切换后超过了此参数所设置的时间量,并且已经有过任何数据库活动(包括一个单一检查点),服务器将切换到一个新的段文件(如果没有数据库活动则会跳过检查点)。
- 注意:由于强制切换而提早关闭的被归档文件仍然与完整的归档文件长度相同。因此,使用非常小的
archive_timeout
是不明智的 — 它将占用巨大的归档存储。一分钟左右的archive_timeout
设置通常比较合理。 - 如果你希望数据能被更快地从主服务器上复制下来,你应该考虑使用流复制而不是归档。
- 默认值为
0
,即禁用此功能。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX/2 | segments;system;reload |
归档恢复(Archive Recovery)
此部分参数只用于恢复模式。如果您希望执行任何后续恢复操作,则必须重置它们。
“Recovery” 涵盖使用服务器作为备用(Standby)服务器或用于执行目标恢复。通常情况,备用模式用于提供高可用性和/或读的可扩展性,而目标恢复用于从数据丢失中恢复。
若要在备用模式下启动服务器,在数据目录中建立名为 standby.signal
的文件。服务器将会进入恢复状态,且在已归档的 WAL 结束时也不会停止恢复状态,而是会通过连接到 primary_conninfo
设置指定的发送服务器和/或用 restore_command
获取新的 WAL 分段来尝试继续保持此状态。
要启动服务器为目标恢复模式,需在数据目录中建立名为 recovery.signal
的文件。 如果同时创建了 standby.signal
和 recovery.signal
文件,则优先使用备用模式。目标恢复模式在归档的 WAL 全部回放或到达 recovery_target
时结束。
archive_cleanup_command
指定在每个重启点执行的 shell 命令。
- 此参数的目的是提供一种清除不再被后备(Standby)服务器需要的旧的已归档 WAL 文件的机制。
- 任何
%r
会被替换为包含最后一个可用重启点的文件的名称。这是使一次恢复变成可重启的所必须被保留的最早的文件,因此比%r
更早的所有文件可以被安全地移除。要在该命令中嵌入一个真正的%
字符,需要写成%%
。这个信息可以被用来把归档截断为支持从当前恢复重启所需的最小值。对于单个后备配置,pg_archivecleanup
模块常常被用在archive_cleanup_command
中,例如:archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'
。 - 但是注意:如果多个后备服务器正在从同一个归档目录中恢复,你将需要保证只有当任意服务器都不再需要 WAL 文件时才会删除它们。
- 如果该命令返回一个非零退出状态,则将会显示一个警告日志消息。一个例外:如果该命令被一个信号或者一个 shell 错误(例如命令未找到)终止,则会抛出一个致命错误。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;reload |
recovery_end_command
指定恢复完成时被执行一次的 shell 命令。
- 此参数是可选的。其目的是为复制或恢复之后的清除提供一种机制。
- 与
archive_cleanup_command
中相似,任何%r
会被替换为包含最后一个可用重启点的文件的名称。 - 如果该命令返回一个非零退出状态,则一个警告日志消息将被写出,并且不管怎样该数据库都将继续启动。一个例外:如果该命令被一个信号或者 shell 错误(例如命令未找到)中止,该数据库将不会继续启动。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;reload |
restore_command
用于获取使用 WAL 文件系列的一个已归档段的本地 shell 命令。
- 这个参数是归档恢复所必需的,但是对于流复制是可选的。
- 字符串中的任何
%p
占位符会被替换成要被归档文件的路径,而%f
会被替换为文件名(路径为集群的数据目录)。如果要在命令里嵌入一个真正的%
字符,可以使用%%
。 任何%r
会被替换为包含上一个可用重启点的文件的名字。例如:'cp /mnt/server/archivedir/%f %p'
。 - 在那些必须被保留的可重启一次恢复的文件中,此文件是最早的一个,因此这个信息可以被用来把归档截断为支持从当前恢复重启操作所需的最小值。
- 注意:该命令只有在成功时才返回一个为 0 的退出状态。另,该命令将会被询问当前不存在于归档中的文件名,当这样被询问时它必须返回非零。例如:
restore_command = 'cp /mnt/server/archivedir/%f "%p"' restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
- 一个例外是如果该命令被一个信号(不是 SIGTERM,它是数据库服务器关闭的一部分)或者一个 shell 错误(例如命令未找到)终止,则恢复将会中止并且服务器将不会启动。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;restart |
恢复目标(Recovery Target)
此部分参数仅在进行定向恢复操作时设置。默认情况下,恢复将会一直恢复到 WAL 日志的末尾。此部分参数可以被用来指定一个更早的停止点。
注意!
在recovery_target
、recovery_target_lsn
、recovery_target_name
、recovery_target_time
和recovery_target_xid
中,最多只能使用一个,如果在配置文件中使用了多个,将会产生一个错误。
recovery_target
这个参数指定恢复在达到一致状态后尽快结束。
- 在从一个在线备份中恢复时,此参数意味着备份结束的那个点。
- 注意:在技术上,这是一个字符串参数,但是
immediate
是目前唯一允许的值。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
string | immediate | segments;system;restart |
recovery_target_action
指定在达到恢复目标时服务器应该立刻采取的动作。
- 默认动作是
pause
,表示恢复将会被暂停。promote
表示恢复将会结束随后服务器将开始接受连接。shutdown
表示将在达到恢复目标之后停止服务器。 - 使用
pause
设置的目的是:如果这个恢复目标就是恢复最想要的位置,就允许对数据库执行查询。暂停的状态可以使用pg_wal_replay_resume()
继续,这会让恢复终结。如果这个恢复目标不是想要的停止点,那么关闭服务器,将恢复目标设置改为一个稍后的目标并且重启以继续恢复。 - 要让实例在想要的重放点那里准备好,
shutdown
设置可以派上用场。该实例将仍能重放更多 WAL 记录(并且事实上将不得不重放从下一次它被启动后,从最后一个检查点到当前的 WAL 记录)。 - 注意:由于在
recovery_target_action
被设置为shutdown
时,recovery.signal
将不会被移除,任何后续的启动都将会以立刻关闭为终结,除非该配置被改变或者recovery.signal
文件被手工移除。 - 如果没有设置恢复目标,则这个设置没有效果。
- 如果没有启用
hot_standby
,pause
设置的动作将和shutdown
一样。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | pause | pause / promote / shutdown | segments;system;restart |
recovery_target_inclusive
指定是否仅在指定的恢复目标之后停止(on),或者仅在恢复目标之前停止(off)。
- 适用于
recovery_target_lsn
、recovery_target_time
或者recovery_target_xid
被指定的情况。 - 此设置分别控制事务是否有准确的目标 WAL 位置(LSN)、提交时间或事务 ID 将被包括在该恢复中。
| 数据类型 | 默认值 | 设置分类 | | --- | --- | --- | --- | | boolean | on | segments;system;restart |
recovery_target_lsn
此参数指定恢复将继续进行的 WAL LSN。
- 精确的停止点受到
recovery_target_inclusive
(见上文)的影响。 - 使用系统数据类型 pg_lsn 解析此参数。
数据类型 | 默认值 | 设置分类 |
---|---|---|
pg_lsn | segments;system;restart |
recovery_target_name
指定(pg_create_restore_point()
所创建)的已命名的恢复点,恢复将进入该恢复点。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;restart |
recovery_target_time
此参数指定恢复将执行的时间戳。
- 精确的停止点受到
recovery_target_inclusive
(见上文)的影响。
数据类型 | 默认值 | 设置分类 |
---|---|---|
timestamp | segments;system;restart |
recovery_target_timeline
指定恢复到一个特定的时间线中。
- 该值可以是数字时间线 ID 或特殊值。值
current
沿着与执行基本备份时相同的时间线恢复;值latest
将恢复到归档中能找到的最新的时间线,这在一个备用服务器中有用。 - 你通常只需要在复杂的重恢复情况下设置这个参数。在这种情况下你需要返回到一个状态,该状态是在一次时间点恢复之后到达的。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
string | latest | current / latest / Timeline ID | segments;system;restart |
recovery_target_xid
这个参数指定恢复将进入的事务 ID。
- 虽然事务 ID 是在事务开始时顺序分配的,但是事务可能以不同的数字顺序完成。
- 那些在指定事务之前(也可以包括该事务)提交的事务将被恢复。
- 精确的停止点受到
recovery_target_inclusive
(见上文)的影响。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;restart |