wal_level (enum)
wal_level决定多少信息写入到 WAL 中。默认值是logical, 它写入足够的数据以支持WAL归档和复制,包括在备用服务器上运行只读查询。 minimal删除除了从崩溃或立即关闭中恢复所需的信息之外的所有日志记录。 最后,logical会增加支持逻辑解码所需的信息。每个层次包括所有更低层次 记录的信息。这个参数只能在服务器启动时设置。在minimal级别中,某些批量操作的 WAL 日志可以被安全地跳过,这可以使那些操作更快。这种优化可以应用的操作包括:CREATE TABLE ASCREATE INDEXCLUSTER``COPY到在同一个事务中被创建或截断的表中但最少的 WAL 不会包括足够的信息来从基础备份和 WAL 日志中重建数据,因此,要启用 WAL 归档(archive_mode)和流复制,必须使用replica或更高级别。在logical层,与replica相同的信息会被记录,外加上 允许从 WAL 抽取逻辑修改集所需的信息。使用级别 logical将增加 WAL 容量,特别是如果为了REPLICA IDENTITY FULL配置了很多表并且执行了很多UPDATE和DELETE 语句时。
fsync (boolean)
如果打开这个参数,数据库服务器将尝试确保更新被物理地写入到磁盘,做法是发出fsync()系统调用或者使用多种等价的方法(见wal_sync_method)。这保证了数据库集簇在一次操作系统或者硬件崩溃后能恢复到一个一致的状态。虽然关闭fsync常常可以得到性能上的收益,但当发生断电或系统崩溃时可能造成不可恢复的数据损坏。因此,只有在能很容易地从外部数据中重建整个数据库时才建议关闭fsync。能安全关闭fsync的环境的例子包括从一个备份文件中初始加载一个新数据库集簇、使用一个数据库集簇来在数据库被删掉并重建之后处理一批数据,或者一个被经常重建并却不用于失效备援的只读数据库克隆。单独的高质量硬件不足以成为关闭fsync的理由。当把fsync从关闭改成打开时,为了可靠的恢复,需要强制在内核中的所有被修改的缓冲区进入持久化存储。这可以在多个时机来完成:在集簇被关闭时或在fsync因为运行initdb --sync-only而打开时、运行sync时、卸载文件系统时或者重启服务器时。在很多情况下,为不重要的事务关闭synchronous_commit可以提供很多关闭fsync的潜在性能收益,并不会有的同时,关闭fsync可以提供很多潜在的性能优势,而不会有伴随着的数据损坏风险。fsync只能在postgresql.conf文件中或在服务器命令行上设置。如果你关闭这个参数,请也考虑关闭full_page_writes。
synchronous_commit (enum)
指定在命令返回“success”指示给客户端之前,一个事务是否需要等待 WAL 记录被写入磁盘。合法的值是on、remote_apply、remote_write、local和off。默认的并且安全的设置是on。当设置为off时,在向客户端报告成功和真正保证事务不会被服务器崩溃威胁之间会有延迟(最大的延迟是wal_writer_delay的三倍)。不同于fsync,将这个参数设置为off不会产生数据库不一致性的风险:一个操作系统或数据库崩溃可能会造成一些最近据说已提交的事务丢失,但数据库状态是一致的,就像这些事务已经被干净地中止。因此,当性能比完全确保事务的持久性更重要时,关闭synchronous_commit可以作为一个有效的代替手段。如果synchronous_standby_names被设置,这个参数也控制事务提交是否将等待事务的 WAL 记录被复制到后备服务器上。当这个参数被设置为on时,直到来自于当前同步的后备服务器的一个回复指示该后备服务器已经收到了事务的提交记录并将其刷入了磁盘,主服务器上的事务才会提交。这保证事务将不会被丢失,除非主服务器和后备服务器都遭受到了数据库存储损坏的问题。当设置为remote_apply>时,提交将等待,直到来自当前同步备用数据库的回复表明它们已收到事务的提交记录并应用它,以便它对备用数据库上的查询可见。当这个参数被设置为remote_write时,提交将等待,直到来自当前同步的后备服务器的一个回复指示该服务器已经收到了该事务的提交记录并且已经把该记录写出到后备服务器的操作系统,但是该数据并不一定到达了后备服务器上的稳定存储。这种设置足以保证数据在后备服务器的TeleDB实例崩溃时得以保存,但是不能保证后备服务器遭受操作系统级别崩溃时数据能被保持。最后,设置local会导致提交等待本地刷新到磁盘,但不会进行复制。当使用同步复制时通常不需要这样做,但是为了完整性而提供。当使用同步复制时,它将对等待本地刷写磁盘和 WAL 记录复制很敏感,或者对允许事务异步提交很敏感。不过,设置local可以用于希望等待本地刷写磁盘但不等待同步复制的事务。如果没有设置synchronous_standby_names,设置on、remote_write和local都提供了同样的同步级别:事务提交只等待本地刷写磁盘。这个参数可以随时被修改;任何一个事务的行为由其提交时生效的设置决定。因此,可以同步提交一些事务,同时异步提交其他事务。例如,当默认是相反时,实现一个单一多语句事务的异步提交,在事务中发出SET LOCAL synchronous_commit TO 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 文件)open_* 选项也可以使用O_DIRECT(如果可用)。不是在所有平台上都能使用所有这些选择。默认值是列表中第一个被平台支持的那个, 不过fdatasync是 Linux 中的默认值。默认值不一定是最理想的;有可能需要修改这个设置或系统配置的其他方面来创建一个崩溃-安全的配置,或达到最佳性能。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。
full_page_writes (boolean)
当这个参数为打开时,TeleDB服务器在一个检查点之后的页面的第一次修改期间将每个页面的全部内容写到 WAL 中。这么做是因为在操作系统崩溃期间正在处理的一次页写入可能只有部分完成,从而导致在一个磁盘页面中混合有新旧数据。在崩溃后的恢复期间,通常存储在 WAL 中的行级改变数据不足以完全恢复这样一个页面。存储完整的页面映像可以保证页面被正确存储,但代价是增加了必须被写入 WAL 的数据量(因为 WAL 重放总是从一个检查点开始,所以在检查点后每个页面的第一次改变时这样做就够了。因此,一种减小全页面写开销的方法是增加检查点间隔参数值)。把这个参数关闭会加快正常操作,但是在系统失败后可能导致不可恢复的数据损坏,或者静默的数据损坏。其风险类似于关闭fsync, 但是风险较小。并且只有在可关闭fsync的情况下才应该关闭它。关闭这个选项并不影响用于时间点恢复(PITR)的 WAL 归档使用。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。默认值是on。
wal_log_hints (boolean)
当这个参数为on时,TeleDB服务器一个检查点之后页面被第一次修改期间把该磁盘页面的整个内容都写入 WAL,即使对所谓的提示位做非关键修改也会这样做。如果启用了数据校验和,提示位更新总是会被 WAL 记录并且这个设置会被忽略。你可以使用这个 设置测试如果你的数据库启用了数据校验和,会有多少额外的 WAL 记录发生。这个参数只能在服务器启动时设置。默认值是off。
wal_compression (boolean)
当这个参数为on,full_page_writes为on,或者基础备份中,TeleDB服务器压缩完整页面图片到WAL中。在WAL回放中解压压缩的页面图片。缺省值为off。只有超级用户可以修改这个设置。开启这个参数可以减少WAL量而不增加不可恢复数据丢失的风险, 但是增加了WAL日志压缩以及WAL回放解压过程中一些额外CPU成本开销。
wal_buffers (integer)
用于还未写入磁盘的WAL 数据的共享内存量。默认值 -1 选择等于shared_buffers的 1/32 的尺寸(大约3%),但是不小于64kB也不大于 WAL 段的尺寸(通常为16MB)。如果自动的选择太大或太小可以手工设置该值,但是任何小于32kB的正值都将被当作32kB。这个参数只能在服务器启动时设置。在每次事务提交时,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_writer_flush_after 字节的 WAL,WAL 将只被写入到操作系统,而不刷新到磁盘。如果 wal_writer_flush_after被设置为0,则 WAL 数据立即被刷新。默认是1MB。这个参数只能在postgresql.conf文件中或者服务器命令行上设置。
commit_delay (integer)
在一次WAL 刷写被发起之前,commit_delay增加一个时间延迟,以微秒计。如果系统负载足够高,使得在一个给定间隔内有额外的事务准备好提交,那么通过允许更多事务通过一个单次 WAL 刷写来提交能够提高组提交的吞吐量。但是,它也把每次 WAL 刷写的潜伏期增加到了最多commit_delay微秒。因为如果没有其他事务准备好提交,就会浪费一次延迟,只有在当一次刷写将要被发起时有至少commit_siblings个其他活动事务时,才会执行一次延迟。另外,如果fsync被禁用,则将不会执行任何延迟。默认的commit_delay是零(无延迟)。只有超级用户才能修改这个设置。
commit_siblings (integer)
在执行commit_delay延迟时,要求的并发活动事务的最小数目。大一些的值会导致在延迟间隔期间更可能有至少另外一个事务准备好提交。默认值是五个事务。