Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

19.5. 预写式日志 #

19.5.1. 设置
19.5.2. 检查点
19.5.3. 归档
19.5.4. 恢复
19.5.5. 归档恢复
19.5.6. 恢复目标
19.5.7. WAL 总结

有关调整这些设置的其他信息,请参阅第 28.5 节

19.5.1. Settings #

wal_level (枚举) #

wal_level 决定写入 WAL 的信息量。默认值是 副本,它编写的足够数据以支持 WAL 归档和复制,包括在备用服务器上运行只读查询。最小删除所有日志记录,除了从崩溃或立即关机中恢复所需的信息。最后,逻辑添加了支持逻辑解码所需的信息。每个级别都包括所有较低级别记录的信息。此参数只能在服务器启动时设置。

最小级别生成最少的 WAL 卷。它不会在创建或重写它们的事务的永久关系中记录任何行信息。这可以使操作更快(请参阅第 14.4.7 节)。启动此优化的操作包括

ALTER ... SET TABLESPACE
CLUSTER
CREATE TABLE
REFRESH MATERIALIZED VIEW(不带CONCURRENTLY
REINDEX
TRUNCATE

但是,最小 WAL 对于时间点恢复而言没有足够的信息,因此必须使用副本或更高版本来启用连续归档(archive_mode)和流式二进制复制。事实上,如果 max_wal_senders 非零,服务器甚至不会在此模式下启动。请注意,将 wal_level 更改为最小会使先前基准备份无法用于时间点恢复和备用服务器。

逻辑级别中,记录的信息与副本中的信息相同,另外还记录了从 WAL 中提取逻辑更改集所需的信息。使用逻辑级别将增加 WAL 卷,特别是如果为许多表配置了REPLICA IDENTITY FULL并且执行了许多UPDATEDELETE语句。

在 9.6 之前的版本中,此参数还允许使用归档热备用值。这些仍然会被接受,但会映射到副本

fsync (布尔值) #

如果此参数处于打开状态,PostgreSQL 服务器将通过发出 fsync() 系统调用或各种等效方法(请参阅 wal_sync_method)来确保更新已物理写入磁盘。这可确保在操作系统或硬件崩溃后,数据库群集可恢复到一致状态。

虽然关闭 fsync 通常有益于性能,但如果断电或系统崩溃,则可能会导致不可恢复的数据损坏。因此,仅当你可以轻松从外部数据重新创建整个数据库时,才建议关闭 fsync

关闭 fsync 的安全情况示例包括从备份文件初始加载新的数据库群集、使用数据库群集处理批次数据(其后会丢弃数据库并重新创建数据库),或用于只读数据库克隆(其经常被重新创建且不用于故障转移)。光靠高质量硬件并不能充分证明关闭 fsync

要保证在将 fsync 从关闭状态更改为打开状态时可靠恢复,必须强制将内核中所有已修改的缓冲区都强制到持久化存储中。当群集处于关闭状态或 fsync 处于打开状态时,可以通过运行 initdb --sync-only、运行 sync、卸载文件系统或重新启动服务器来实现此操作。

在许多情况下,针对非关键事务关闭 synchronous_commit 即可提供关闭 fsync 的潜在性能优势,而无需承担数据损坏的风险。

仅可在 postgresql.conf 文件或服务器命令行中设置 fsync。如果你关闭此参数,还请考虑关闭 full_page_writes

synchronous_commit (枚举) #

指定在数据库服务器返回“成功指示给客户端之前必须完成多少 WAL 处理。有效值为 remote_applyon(默认值)、remote_writelocaloff

如果 synchronous_standby_names 为空,唯一有意义的设置是 onoffremote_applyremote_writelocal 都提供与 on 相同的本地同步级别。所有非 off 模式的本地行为都是等待 WAL 本地刷新到磁盘。在 off 模式下,不存在等待,因此当向客户端报告成功与稍后保证事务在服务器崩溃时安全的之间可能存在延时。(最大延时是 wal_writer_delay 的三倍。)与 fsync 不同,将此参数设置为 off 不会产生任何数据库不一致的风险:操作系统或数据库崩溃可能导致一些最近声称已提交的事务丢失,但数据库状态将与这些事务已干净地中止时完全相同。因此,当性能比对事务的持久性确切无误更重要时,关闭 synchronous_commit 可能是一种有用的选择。有关更多讨论,请参阅第 28.4 节

如果 synchronous_standby_names 非空,synchronous_commit 也将控制事务提交是否会等待其 WAL 记录在备用服务器上处理。

设置为 remote_apply 时,提交将等到当前同步备用库的回复表明它们已接收事务的提交记录并已应用该记录,以便备用库上的查询可以使用它,并已写入备用库上的持久存储器。由于需等待 WAL 重放,因此这将导致比先前的设置大得多的提交延迟。设置为 on 时,提交将等到当前同步备用库的回复表明它们已接收事务提交记录,并已将该记录刷新到持久存储器。这样可以确保,除非主库和所有同步备用库的数据库存储损坏,否则不会丢失事务。设置为 remote_write 时,提交将等到当前同步备用库的回复表明它们已接收事务的提交记录并已将其写入文件系统。如果 PostgreSQL 的备用实例崩溃,此设置可以确保数据保留,但如果备用发生了操作系统级别的崩溃,则无法确保数据保留,因为数据在备用库上不一定已经写入到持久存储器中。设置 local 会让提交等待本地刷新到磁盘,但不等待复制。在使用同步复制时,这种设置通常不可取,但本说明书中提供它以供参考。

此参数可以随时更改;任何一条事务的行为由在提交时生效的设置来决定。因此,完全可以也十分有用的是让一些事务同步提交,而另一些异步提交。例如,要在默认设置相反时以异步方式提交一个多语句事务,可以在事务中发出 SET LOCAL synchronous_commit TO OFF

表 19.1 总结了 synchronous_commit 设置的功能。

表 19.1. synchronous_commit 模式

synchronous_commit 设置 本地持久提交 PG 崩溃后备用持久提交 系统崩溃后备用持久提交 备用查询一致性
remote_apply
on  
remote_write    
local      
off        

wal_sync_method (enum) #

将 WAL 更新强制输出到磁盘时使用的方法。如果 fsync 为关闭,则此设置无关,因为 WAL 文件更新根本不会被强制输出。可能的值有

  • open_datasync(使用 open() 选项 O_DSYNC 编写 WAL 文件)

  • fdatasync(每次提交时调用 fdatasync()

  • fsync(每次提交时调用 fsync()

  • fsync_writethrough(每次提交时调用 fsync(),强制写穿上任何磁盘写缓存)

  • open_sync(使用 open() 选项 O_SYNC 写入 WAL 文件)

并非所有这些选项都可在所有平台上使用。默认选项为上述列表中由平台支持的第一种方法,但对于 Linux 和 FreeBSD,fdatasync 是默认选项。默认选项不一定是最理想的;可能需要更改此设置或系统配置的其他方面,才能创建防崩溃配置或达到最优性能。在 第 28.1 节 中探讨了这些方面。仅在 postgresql.conf 文件或服务器命令行中设置此参数。

full_page_writes (boolean) #

当此参数开启时,PostgreSQL 服务器在检查点后首次修改磁盘页时,将该页的全部内容写入到 WAL。这是必需的,因为在操作系统崩溃过程中正在执行的页写入可能只部分完成,导致该磁盘页包含旧数据和新数据的混合。在崩溃后恢复过程中,通常存储在 WAL 中的行级别更改数据不足以完全还原这样的页。存储完整的页映像可确保可以正确还原页,但代价是增加写入 WAL 的数据量。(因为 WAL 重放始终从检查点开始,因此在检查点后第一次更改每个页时执行此操作就足够了。因此,减少完整页写入成本的一种方法是增加检查点间隔参数。)

关闭此参数将加快正常操作速度,但在系统故障后可能导致不可恢复的数据损坏或静默数据损坏。风险类似于关闭 fsync,但更小,并且仅在针对推荐开启该参数的情况的基础上才关闭此参数。

关闭此参数不会影响使用 WAL 归档来执行时间点恢复 (PITR)(请参见 第 25.3 节)。

仅在 postgresql.conf 文件或服务器命令行中设置此参数。默认值为 on

wal_log_hints (布尔值) #

当此参数为 on 时,PostgreSQL 服务器在检查点后对该页的首次修改期间,将把每个磁盘页的全部内容写入 WAL,即使是对所谓的提示位进行非关键修改也是如此。

如果启用了数据校验和,提示位更新始终记录 WAL,并且忽略此设置。您可以使用此设置来测试如果启用了数据库数据校验和,将产生多少额外的 WAL 日志记录。

此参数只能在服务器启动时设置。默认值为 off

wal_compression (枚举) #

此参数使用指定的压缩方法启用 WAL 压缩。启用后,PostgreSQL 服务器会在 full_page_writes 为 on 或在进行基本备份期间,将完整的页映像压缩到 WAL。压缩的页映像将在 WAL 重放期间解压缩。支持的方法有 pglzlz4(如果使用 --with-lz4 编译 PostgreSQL)和 zstd(如果使用 --with-zstd 编译 PostgreSQL)。默认值为 off。只有超级用户和具有相应 SET 权限的用户才能更改此设置。

启用压缩可以减少 WAL 卷而无需增加无法恢复的数据损坏的风险,但代价是在 WAL 日志记录期间额外消耗一些 CPU 进行压缩,并在 WAL 重放期间进行解压缩。

wal_init_zero (布尔值) #

如果设置为 on(默认为此选项),则新 WAL 文件将填满零。在某些文件系统上,这可确保在需要编写 WAL 记录之前已分配好空间。但是,写时复制 (COW) 文件系统可能无法从此技术中受益,因此给出了跳过不必要工作的选项。如果设置为 off,则只有在创建文件时才写入最后一个字节,以便它具有预期的尺寸。

wal_recycle (布尔值) #

如果设置为on(默认),此选项会导致 WAL 文件通过重命名来回收,这样可以避免创建新文件。在 COW 文件系统中,创建新文件可能更快,因此给出了此选项来禁用此行为。

wal_buffers (integer) #

供尚未写入磁盘的 WAL 数据使用的共享内存量。默认设置 -1 选择大小等于shared_buffers的 1/32(约为 3%),但不能小于64kB,也不能大于一个 WAL 段的大小,通常为16MB。如果自动选择太大或太小,可以使用手动设置此值,但任何小于32kB的正值都将视为32kB。如果此值不带单位指定,则将其视为 WAL 块,即XLOG_BLCKSZ字节,通常为 8kB。该参数只能在服务器启动时设置。

WAL 缓冲区的内容在每次事务提交时写入磁盘,因此极大的值不太可能提供显着的优势。不过,将此值至少设置为几兆字节,可以在事务提交频繁的繁忙服务器上提高写入性能。在大多数情况下,默认设置 -1 选择的自动调整应给出合理的结果。

wal_writer_delay (integer) #

指定 WAL 写入器写入 WAL 的频率,以时间为单位。写入 WAL 后,写入器会休眠wal_writer_delay指定的时间长度,除非异步提交的事务使其提前唤醒。如果上次刷新发生在不到wal_writer_delay之前并且自那时起产生的 WAL 少于wal_writer_flush_after,那么 WAL 只会写入操作系统,不会刷新到磁盘。如果此值不带单位指定,则将其视为毫秒。默认值为 200 毫秒 (200ms)。请注意,在某些系统上,休眠延迟的有效分辨率为 10 毫秒;将wal_writer_delay设置为不是 10 的倍数的值可能会产生与将其设置为下一个更大的 10 的倍数相同的结果。此参数只能在postgresql.conf文件或服务器命令行中设置。

wal_writer_flush_after (integer) #

指定 WAL 写作者清空 WAL 的频率,以卷为单位。如果最近清空的时间不到 wal_writer_delay,并且从那时产生的 WAL 容量不到 wal_writer_flush_after,则 WAL 只被写入操作系统,而不会清空到磁盘。如果 wal_writer_flush_after 设置为 0,则 WAL 数据始终被立即清空。如果未指明单位,则此值被视为 WAL 块,即 XLOG_BLCKSZ 字节,通常为 8kB。默认为 1MB。该参数只能在 postgresql.conf 文件或服务器命令行中设置。

wal_skip_threshold (integer) #

wal_levelminimal,并且在创建或重新写入永久性关系后提交事务时,此设置决定如何保留新数据。如果数据小于此设置,则将其写入 WAL 日志;否则,使用受影响文件的 fsync。根据存储属性,提高或降低此值可能会在相应提交减缓并发事务时提供帮助。如果未指明单位,则此值被视为千字节。默认为二兆字节 (2MB)。

commit_delay (integer) #

设置 commit_delay 会在启动 WAL 清空前增加一个时间延迟。如果系统负载足够高,则有更多事务准备好在此延迟内提交,这可以通过单次 WAL 清空提交来提高组提交吞吐量。但是,它也会将每个 WAL 清空的延迟提高到 commit_delay。由于当没有更多事务准备好提交时,延迟只不过是一种浪费,因此只有当至少 commit_siblings 个其他事务在清空准备启动时处于活动状态时才执行延迟。此外,如果禁用 fsync,则不会执行延迟。如果未指明单位,则此值被视为微秒。默认 commit_delay 为零(无延迟)。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

PostgreSQL 9.3 之前的版本中,commit_delay 的行为不同,效果也较差:它只影响提交,而不是所有 WAL 刷新,并且即使 WAL 刷新得更快,也会等待整个配置的延迟时间。从 PostgreSQL 9.3 开始,第一个准备好刷新数据的进程会等待配置的时间间隔,而后面的进程只等到 leader 完成刷新操作。

commit_siblings (整数) #

在执行 commit_delay 延迟之前,最少需要的并发打开事务数。随着该值增大,在延迟时间间隔内其他至少有一个事务准备好提交数据的可能性也越大。默认的事务数为五个。

19.5.2. 检查点 #

checkpoint_timeout (整数) #

自动 WAL 检查点之间的最大时间间隔。如果此值没有指定单位,则以秒为单位。有效范围介于 30 秒到一天之间。默认值为五分钟 (5min)。增加这个参数可能会增长崩溃恢复所需的时间。这个参数只能在 postgresql.conf 文件中或在服务器命令行中设置。

checkpoint_completion_target (浮点数) #

指定检查点完成目标,为检查点之间总时间的几分之一。默认值为 0.9,该值使检查点分布在几乎所有可用的时间间隔内,提供相当一致的 I/O 负载,同时留出一些时间进行检查点完成开销。不建议降低此参数,因为它会导致检查点更快完成。这会导致在检查点操作期间的 I/O 速率更高,之后在检查点完成到下次计划的检查点这段时间内出现 I/O 速率较低的阶段。这个参数只能在 postgresql.conf 文件中或在服务器命令行中设置。

checkpoint_flush_after (整数) #

当执行检查点时,只要写入的数据量超过这个值,请尝试强制操作系统将这些写入发布到底层存储。这样做会限制内核页面缓存中的脏数据量,从而减少在检查点结束时或当操作系统以更大的批次在后台写入数据时,发出 fsync 时发生停顿的可能性。通常这会大大减少事务延迟,但也有一些情况,特别是当工作负载大于 shared_buffers 但小于操作系统的页面缓存时,性能可能会下降。此设置在某些平台上可能没有任何影响。如果未指定单位,则此值表示块数,即 BLCKSZ 字节,通常为 8kB。有效范围介于禁用强制回写02MB之间。在 Linux 上,默认值为 256kB,在其他地方为0。(如果 BLCKSZ 不是 8kB,则默认值和最大值将与其成比例)此参数只能在 postgresql.conf 文件或服务器命令行中设置。

checkpoint_warning (integer) #

当由 WAL 段文件填充而导致的检查点之间的间隔小于此时间量时,向服务器日志写入一条消息(这表明应提高 max_wal_size)。如果未指定单位,则此值表示秒数。默认值为 30 秒(30s)。零禁用此警告。如果 checkpoint_timeout 小于 checkpoint_warning,则不会生成任何警告。此参数只能在postgresql.conf文件或服务器命令行中设置。

max_wal_size (integer) #

自动检查点期间允许 WAL 增长的最大大小。这是一个软限制;WAL 大小可以在特殊情况下超过 max_wal_size ,例如重负载、 archive_commandarchive_library 出现故障,或 wal_keep_size 设置较高。如果未指定单位,则该值将作为兆字节。默认值为 1 GB。增加此参数可能会增加故障恢复所需的时间。此参数只能在 postgresql.conf 文件或服务器命令行中设置。

min_wal_size (integer) #

只要 WAL 磁盘使用量低于此设置,旧 WAL 文件在检查点期间总是会被循环利用以供以后使用,而不是被移除。这可用于确保保留足够的 WAL 空间以处理 WAL 使用量的峰值,例如在运行大批量作业时。如果未指定单位,则该值将作为兆字节。默认值为 80 MB。此参数只能在 postgresql.conf 文件或服务器命令行中设置。

19.5.3. 归档 #

archive_mode (enum) #

启用 archive_mode 时,通过设置 archive_commandarchive_library 将完成的 WAL 段发送到归档存储。除了 off(禁用),还有两种模式:onalways。在正常操作期间,这两种模式之间没有区别,但在设置为 always 时,WAL 归档器在归档恢复或备用模式期间也会启用。在 always 模式下,从归档中恢复或通过流复制流式传输的所有文件都会再次归档。有关详细信息,请参阅 第 26.2.9 节

archive_modearchive_commandarchive_library 是独立的设置,因此在不离开归档模式的情况下可以更改 archive_commandarchive_library。此参数只能在服务器启动时设置。当 wal_level 设置为 minimal 时,无法启用 archive_mode

archive_command (string) #

用于执行已完成 WAL 文件段的存档的本地 Shell 命令。字符串中的任何 %p 都将替换为要存档的文件的路径名称,任何 %f 都将仅替换为文件名。(路径名称相对于服务器的工作目录,即集群的数据目录。)请使用 %% 来在命令中嵌入一个实际的 % 字符。只有命令在执行成功时才应返回零退出状态,这一点非常重要。有关更多信息,请参见 第 25.3.1 节

此参数只能在 postgresql.conf 文件或服务器命令行中设置。只有在服务器启动时已启用 archive_mode 并且 archive_library 设置为空字符串时,才会使用它。如果已设置 archive_commandarchive_library,则会引发错误。如果启用了 archive_mode(并且 archive_library 设置为空字符串),而 archive_command 为空字符串(默认值),则 WAL 存档将暂时禁用,但服务器将继续累积 WAL 段文件,期待很快将提供一个命令。将 archive_command 设置为只返回 true 而无其他作用的命令(例如 /bin/true(Windows 中的 REM)),实际上会禁用存档,但还会破坏存档恢复所需的 WAL 文件链,因此只能在特殊情况下使用。

archive_library (string) #

用于存档已完成 WAL 文件段的库。如果将它设置为一个空字符串(默认值),则将启用通过 shell 进行存档,并且使用 archive_command。如果已设置 archive_commandarchive_library,则会引发错误。否则,将使用特定的共享库来进行存档。此参数发生变化时,主服务器将重新启动 WAL 存档器进程。有关更多信息,请参见 第 25.3.1 节第 49 章

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

archive_timeout (integer) #

在未完成 WAL 段情况下,archive_commandarchive_library 才能被调用。因此,如果服务器生成较小的 WAL 流量(或在长时间内这样做),那么在事务完成并安全地记录到归档存储之间可能延迟较长时间。为限制未归档数据的期限,您可以设置 archive_timeout 来强制服务器定期切换到新的 WAL 段文件。此参数大于 0 时,服务器将在自上次段文件切换以来经过该时间段且发生任何数据库活动后(包括单个检查点),切换到新的段文件(如果未发生数据库活动,将跳过检查点)。请注意,由于强制切换而过早关闭的归档文件长度仍然与完全满了的文件一样。因此,如果使用非常短的 archive_timeout,是不可取的,因为这样会使归档存储膨胀。大概要一分钟或更长时间的 archive_timeout 设置是合理的了。如果您希望更快地从主服务器中复制数据,则应该考虑使用流复制,而不是归档。如果未指定单位,此值将视为秒。此参数只能在 postgresql.conf 文件或服务器命令行中设置。

19.5.4. 恢复 #

此部分描述了适用于常规恢复的设置,会影响故障恢复、流复制和基于存档的复制。

recovery_prefetch (enum) #

在恢复期间,是否尝试预取 WAL 中引用的但尚未进入缓冲池的块。有效值有 offontry(默认值)。设置 try 仅当操作系统提供 posix_fadvise 函数(它当前用于实现预取)时才启用预取。请注意,某些操作系统提供了此函数,但什么也不做。

预取即将需要使用的块,可以减少某些工作负载下的恢复期间的 I/O 等待时间。另请参阅 wal_decode_buffer_sizemaintenance_io_concurrency 设置,它们限制预取活动。

wal_decode_buffer_size (integer) #

服务器查找要预取的块在预写日志中最多可以预览多远距离的限制。如果此值未加单位,则以字节为单位。默认值为 512 kB。

19.5.5. 归档恢复 #

本部分仅介绍恢复期间适用的设置。在进行后续恢复时,必须重置这些设置。

恢复包括将服务器用作备用或执行目标恢复。通常,备用模式用于提供高可用性及/或读取可伸缩性,而目标恢复用于从数据丢失中恢复。

要在备用模式下启动服务器,请在数据目录中创建名为 standby.signal 的文件。服务器将进入恢复并当未达到归档预写日志的末端时不会停止恢复,但会通过连接到备用 primary_conninfo 设置指定的服务器和/或使用 restore_command 提取新预写日志段来继续进行恢复。在此模式下,本部分和第 19.6.3 节中的参数需引起关注。来自第 19.5.6 节中的参数也将应用,但通常在此模式下无用。

要在目标恢复模式下启动服务器,请在数据目录中创建名为 recovery.signal 的文件。如果同时创建 standby.signalrecovery.signal 文件,备用模式将优先。当归档预写日志完全重播或达到 recovery_target 时,目标恢复模式结束。在此模式下,本部分和第 19.5.6 节中的两个参数都将被使用。

restore_command (string) #

用于执行存档的 WAL 文件系列分段的本地 shell 命令。归档恢复需要此参数,流复制需要可是可选项。字符串中任何 %f 会被从归档中检索的文件名替换,任何 %p 会被服务器上的副本目标路径名替换。(路径名相对于当前工作目录,即集群数据目录。)任何 %r 会被包含最后有效重启点的文件的文件名替换。这是必须保留的 earliest 文件,以便进行可重启恢复,因此可使用此信息将归档截断为仅支持从当前恢复重启所需的最小值。 %r 通常仅由暖备用配置使用(参见 第 26.2 节)。写入 %% 以嵌入实际 % 字符。

命令仅在成功时返回零退出状态非常重要。命令请求归档中不存在的文件名;收到此类请求时,必须返回非零值。示例

restore_command = 'cp /mnt/server/archivedir/%f "%p"'
restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"'  # Windows

但有例外情况,如果命令被信号中断(除了 SIGTERM,这是数据库服务器关闭的一部分),或外壳出现错误(如找不到命令),则恢复将中止,服务器将不会启动。

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

archive_cleanup_command (字符) #

此可选参数指定将在每个重启点执行的 shell 命令。archive_cleanup_command 的目的是提供一种清除备用服务器不再需要的旧存档 WAL 文件的机制。任何 %r 会被包含最后有效重启点的文件的文件名替换。这是必须保留的 earliest 文件,以便进行的可重启恢复,因此比 %r 更早的所有文件可以安全地删除。可以使用此信息将归档截断为仅支持从当前恢复重启所需的最小值。 pg_archivecleanup 模块通常在 archive_cleanup_command 中用于单备用配置,例如

archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'

不过请注意,如果多个备用服务器正在从同一归档目录中还原,你需要确保在服务器不再需要时才删除 WAL 文件。archive_cleanup_command 通常会在暖备配置中使用(参见第 26.2 节)。写入 %% 可在命令中嵌入实际 % 字符。

如果命令返回非零退出状态,系统会写入一条警告日志消息。不过,如果命令是由信号或 shell 错误(如命令未找到)终止的,系统会引发致命错误。

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

recovery_end_command (string) #

此参数指定一个 shell 命令,它将在恢复结束后仅执行一次。此参数是可选的。recovery_end_command 的目的是提供一种在复制或恢复后进行清理的机制。任何 %r 都会替换为包含最后有效重启点的文件的文件名,就像在 archive_cleanup_command 中一样。

如果命令返回非零退出状态,系统会写入一条警告日志消息,但是数据库仍会继续启动。不过,如果命令是由信号或 shell 错误(如命令未找到)终止的,数据库不会继续启动。

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

19.5.6. 恢复目标 #

默认情况下,恢复会恢复到 WAL 日志的末尾。可使用以下参数指定更早的停止点。recovery_targetrecovery_target_lsnrecovery_target_namerecovery_target_timerecovery_target_xid 最多只能使用一个;如果在配置文件中指定了多个参数,系统会引发错误。这些参数只能在服务器启动时设置。

recovery_target = 'immediate' #

此参数指定一达成一致状态即应结束恢复,也就是说,应尽早结束。从在线备份还原时,表示备份结束时的点。

从技术角度来说,这是一个字符串参数,但 'immediate' 目前是惟一允许的值。

recovery_target_name (string) #

此参数指定恢复将进行到的已命名还原点(使用 pg_create_restore_point() 创建)。

recovery_target_time (timestamp) #

此参数指定恢复将进行到的时间戳。精确停止点还受 recovery_target_inclusive 的影响。

此参数的值是 timestamp with time zone 数据类型接受的相同格式中的时间戳,但不能使用时区分量缩写(除非已在配置文件中先前设置了 timezone_abbreviations 变量)。首选样式是使用与 UTC 的数字偏移量,或写完整的时区名称,如 Europe/Helsinki 而不是 EEST

recovery_target_xid (string) #

此参数指定恢复将进行到的事务 ID。记住,虽然事务 ID 在事务启动时按顺序指定,但事务可以按不同的数字顺序完成。将恢复的事务是在指定的事务之前(并且可选地包括该事务)提交的事务。精确停止点还受 recovery_target_inclusive 的影响。

recovery_target_lsn (pg_lsn) #

此参数指定将恢复到该值的预写日志位置的 LSN。精确停止点还受 recovery_target_inclusive 的影响。使用系统数据类型 pg_lsn 解析此参数。

以下选项进一步指定恢复目标,并影响达到目标时发生的情况

recovery_target_inclusive (boolean) #

指定在指定恢复目标后(on)立即停止,还是在恢复目标前(off)稍作停顿。在指定 recovery_target_lsnrecovery_target_timerecovery_target_xid 时应用。此设置控制在恢复中包含事务的相应目标 WAL 位置(LSN)、提交时间或事务 ID,其值为 on

recovery_target_timeline (string) #

指定恢复到特定时间线。其值可以是数字时间线 ID 或特殊值。值 current 沿备份基线在进行备份时序列的同一时间线恢复。值 latest 恢复到存档中找到的最新时间线,这在备用服务器中较为实用。 latest 为默认值。

要以十六进制形式指定时间线 ID(例如,从 WAL 文件名或历史文件提取),请在前面加上 0x。例如,如果 WAL 文件名为 00000011000000A10000004F,则时间线 ID 为 0x11(或 17 十进制)。

您通常只需要在复杂的重新恢复情况下设置此参数,此时您需要返回到执行一次时间点恢复之后到达的状态。详见 第 25.3.6 节 的讨论内容。

recovery_target_action (enum) #

指定在达到恢复目标后服务器应执行的操作。默认值为 pause,表示将暂停恢复。 promote 表示恢复进程将完成,并且服务器将开始接受连接。最后,shutdown 将在达到恢复目标后停止服务器。

pause 设置的预期用途是允许针对数据库执行查询,以检查此恢复目标是否是恢复的最理想点。可以使用 pg_wal_replay_resume() 恢复暂停状态(请参见 表 9.97),然后导致恢复结束。如果此恢复目标不是所需的停止点,请关闭服务器,将恢复目标设置更改为更靠后的目标,然后重新启动以继续恢复。

shutdown 设置对于在所需的精确重放点使实例准备就绪很有用。实例仍将能够重放更多的 WAL 记录(实际上必须重放上次检查点以来的 WAL 记录,下次启动时也是如此)。

请注意,当将 recovery_target_action 设置为 shutdown 时不会删除 recovery.signal,因此任何后续启动都将立即以关闭结束,除非更改配置或手动删除 recovery.signal 文件。

如果未设置恢复目标,此设置无效。如果没有启用 hot_standby,则设置 pause 的效果与设置 shutdown 的效果相同。如果在提升进行期间达到恢复目标,那么设置 pause 的效果与设置 promote 的效果相同。

在任何情况下,如果已配置恢复目标,但在达到目标之前归档恢复结束,服务器将关闭并出现致命错误。

19.5.7 WAL 摘要 #

以下设置控制 WAL 摘要,此特性必须启用才能执行 增量备份

summarize_wal (boolean) #

启用 WAL 摘要处理程序。请注意,可以在主服务器或备用服务器上启用 WAL 摘要。此参数仅可在 postgresql.conf 文件或服务器命令行上设置。默认值为 off

如果将 wal_level 设置为 minimal,则不能使用 summarize_wal=on 启动服务器。如果在服务器启动后将 summarize_wal=on 配置为 wal_level=minimal,则摘要处理程序将运行,但拒绝为使用 wal_level=minimal 生成的任何 WAL 生成摘要文件。

wal_summary_keep_time (integer) #

配置在 WAL 汇总器自动移除旧的 WAL 摘要后的时间量。文件时间戳用于确定哪些文件足够旧,可以删除。通常情况下,您应该将时间设置高于备份与依赖它的后续增量备份之间可经过的时间。必须对增量备份之前和正在进行的备份之间整个 WAL 记录范围内可用 WAL 摘要;如果没有,增量备份将会失败。如果此参数被设置为零,WAL 摘要不会被自动删除,但是您可以手动删除您确信在未来的增量备份中不需要的文件。此参数只能在 postgresql.conf 文件或服务器命令行中被设置。如果不带单位指定此值,则理解它代表分钟。默认值为 10 天。如果 summarize_wal = off,则不论此参数的值是多少,现有的 WAL 摘要都不会被删除,因为 WAL 汇总器不会运行。