pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
关于 WAL 与检查点调优的细节,另见 第 26.3 节。
fsync (boolean) #如果打开这个参数,PostgreSQL服务器将尝试确保更新被物理地写入到磁盘,做法是发出fsync()系统调用或者使用多种等价的方法(见wal_sync_method)。这保证了数据库集簇在一次操作系统或者硬件崩溃后能恢复到一个一致的状态。
不过,使用 fsync 会带来性能损失:提交一个事务时, PostgreSQL 必须等待操作系统把预写日志刷写 到磁盘。当 fsync 被禁用时,操作系统可以尽其所能 地缓冲、排序和延迟写操作。这可以显著提高性能。然而,如果系统崩溃, 最近提交的若干事务的结果可能部分或全部丢失。在最坏的情况下,可能 发生不可恢复的数据损坏。(数据库软件自身的崩溃在这里不 是风险因素。只有操作系统层面的崩溃才会带来损坏的风险。)
由于存在这些风险,fsync 没有一个普遍正确的设置。 有些管理员总是禁用 fsync,另一些管理员只在初始 批量装载数据时才关闭它(此时一旦出错,有明确的重启点),还有一些 管理员始终启用 fsync。默认值是启用 fsync,以获得最大的可靠性。如果你信任你的操作 系统、你的硬件以及你的电力公司(或你的电池备份),可以考虑禁用 fsync。
fsync 只能在postgresql.conf文件中或在服务器命令行上设置。如果你关闭这个参数,请也考虑关闭full_page_writes。
wal_sync_method (string) #用于将 WAL 更新强制写入磁盘的方法。如果fsync关闭,此设置就没有作用,因为 WAL 文件更新根本不会被强制写入磁盘。可选值为:
open_datasync(用open()选项O_DSYNC写 WAL 文件)
fdatasync(在每次提交时调用fdatasync())
fsync(在每次提交时调用fsync())
fsync_writethrough(在每次提交时调用fsync(),强制穿透任何磁盘写缓存)
open_sync(用open()选项O_SYNC写 WAL 文件)
不是在所有平台上都能使用所有这些选择。 默认值是列表中第一个被平台支持的那个,不过fdatasync是 Linux 中的默认值。 这个选项可以在服务器启动时或在postgresql.conf文件中设置。
full_page_writes (boolean) #当这个选项打开时,PostgreSQL服务器在检查点之后第一次修改磁盘页时,会把整个磁盘页的内容写入 WAL。这是必需的,因为在操作系统崩溃期间正在进行的页写入可能只完成了一部分,导致磁盘上出现新旧数据混合的页。WAL 中通常存储的行级变更数据不足以在崩溃后恢复中完全还原这样的页。存储完整页映像可以保证页能被正确还原,但代价是必须写入 WAL 的数据量增加。(因为 WAL 重放总是从检查点开始,所以只需在检查点后每页的第一次变更时这样做就足够了。因此,降低全页写代价的一种办法是增大检查点间隔参数。)
目前这个参数被忽略(被视为总是on),因为关闭它可能导致即使没有发生硬件或操作系统级错误也无法从崩溃中恢复。这将在未来某个版本中修复,或者该参数将被完全移除。
wal_buffers (integer) #用于 WAL 数据的共享内存中的内存量。默认值是 64 千字节(64kB)。这个设置只需要大到足以容纳一个典型事务产生的 WAL 数据量,因为数据在每次事务提交时都会被写出到磁盘。这个参数只能在服务器启动时设置。
增加这个参数可能会导致PostgreSQL请求比你的操作系统默认配置所允许的更多的System V共享内存。如果有必要,关于如何调整那些参数的信息见第 16.4.1 节。
commit_delay (integer) #把一个提交记录写入 WAL 缓冲区和把缓冲区刷出到磁盘之间的时间延迟,以微秒计。如果系统负载足够高,使得额外的事务在给定间隔内变为准备好提交,一个非零的延迟可以允许多个事务只用一次fsync()系统调用提交。但如果没有其他事务变为准备好提交,这个延迟就纯属浪费。因此,只有当服务器进程写完它的提交记录的那一刻,至少有commit_siblings个其他事务处于活动状态时,才会执行该延迟。默认值为零(无延迟)。
commit_siblings (integer) #执行commit_delay延迟前要求的并发活动事务的最小数目。大一些的值会导致在延迟间隔期间更可能有至少另外一个事务准备好提交。默认值是五个事务。
checkpoint_segments (integer) #自动 WAL 检查点之间日志文件段的最大数量(每个段通常为 16 兆字节)。默认值为三个段。增加这个参数会增加崩溃恢复所需的时间。此参数只能在postgresql.conf文件中或服务器命令行上设置。
checkpoint_timeout (integer) #自动 WAL 检查点之间的最长时间,以秒为单位。 合理的范围在 30 秒到 1 小时之间。默认是 5 分钟(5 分钟)。增加这个参数的值可能会增加崩溃恢复所需的时间。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。
checkpoint_warning (integer) #如果由填充检查点段文件导致的检查点发生得比这个秒数更接近,就向服务器日志写一条消息(这建议应该增大checkpoint_segments)。默认值是 30 秒(30 秒)。零会禁用警告。此参数只能在postgresql.conf文件中或服务器命令行上设置。
archive_command (string) #用来归档 WAL 文件系列中一个已完成段的 shell 命令。如果它是空字符串(默认值),WAL 归档被禁用。字符串中的任何%p都会被替换为要归档文件的路径名,任何%f只被替换为文件名。(该路径名相对于服务器的工作目录,即集簇的数据目录。)使用%%可以在命令中嵌入真正的%字符。更多信息见第 23.3.1 节。这个选项只能在服务器启动时或在postgresql.conf文件中设置。
当且仅当命令成功时它返回退出状态零这一点很重要。例如:
archive_command = 'cp -i %p /mnt/server/archivedir/%f </dev/null'
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。