archive_timeout 是一个 配置参数,用于确定在归档 WAL 文件之前可以经过的最长时间,无论其是否已满。
archive_timeout 于 PostgreSQL 8.2 中添加。
用法
通常情况下,WAL 文件会在填满后立即归档。然而,如果活动量较低,文件归档可能会延迟一段时间。通过将 archive_timeout 设置为正值,可以保证在指定的间隔后会创建一个新的 WAL 文件,并归档前一个,但前提是存在会生成 WAL 的活动。
请注意,如果使用不当,这可能导致生成大量几乎为空的 WAL 文件,从而占用比必要更多的归档存储空间。
为了确保 WAL 几乎实时传输到另一台服务器,建议使用流复制。
默认值
archive_timeout 的默认值为:0 (禁用)。
按 PostgreSQL 版本详细信息
archive_timeout (PostgreSQL 19)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 设置在强制切换到下一个 WAL 文件之前等待的时间。 |
| 扩展描述 | 0 表示禁用超时。 |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 18)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 设置在强制切换到下一个 WAL 文件之前等待的时间。 |
| 扩展描述 | 0 表示禁用超时。 |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 17)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 设置在强制切换到下一个 WAL 文件之前等待的时间。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 16)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 设置在强制切换到下一个 WAL 文件之前等待的时间。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 15)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 设置在强制切换到下一个 WAL 文件之前等待的时间。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 14)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 WAL 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 13)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 WAL 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 12)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 WAL 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 11)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 WAL 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 10)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 WAL 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 9.6)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 9.5)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: archive_timeout
archive_timeout (PostgreSQL 9.4)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 |
文档: archive_timeout
archive_timeout (PostgreSQL 9.3)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 |
文档: archive_timeout
archive_timeout (PostgreSQL 9.2)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 |
文档: archive_timeout
archive_timeout (PostgreSQL 9.1)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 |
文档: archive_timeout
archive_timeout (PostgreSQL 9.0)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 归档 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 |
文档: archive_timeout
archive_timeout (PostgreSQL 8.4)
| 设置 | 0 |
| 单位 | s |
| 类别 | Write-Ahead Log / 设置 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 |
文档: archive_timeout
archive_timeout (PostgreSQL 8.3)
| 设置 | |
| 单位 | s |
| 类别 | Write-Ahead Log / 设置 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1073741823 |
文档: archive_timeout
archive_timeout (PostgreSQL 8.2)
| 设置 | |
| 单位 | s |
| 类别 | Write-Ahead Log / 设置 |
| 简短描述 | 如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 2147483647 |
文档: archive_timeout
变更历史
- PostgreSQL 8.2
- 添加于 (commit e8ea9e95)
示例
演示设置 archive_timeout 为 10 秒的效果 (需要将 log_min_messages 设置为 DEBUG1 或更高级别)
[2021-04-01 10:22:24 UTC] psql postgres postgres LOG: 00000: statement: INSERT INTO foo VALUES(1); [2021-04-01 10:22:29 UTC] DEBUG: 00000: write-ahead log switch forced (archive_timeout=10) [2021-04-01 10:22:29 UTC] DEBUG: 00000: archived write-ahead log file "000000010000000000000008" [2021-04-01 10:22:43 UTC] DEBUG: 00000: autovacuum: processing database "proddb" [2021-04-01 10:23:55 UTC] psql postgres postgres LOG: 00000: statement: INSERT INTO foo VALUES(1); [2021-04-01 10:23:59 UTC] DEBUG: 00000: write-ahead log switch forced (archive_timeout=10) [2021-04-01 10:23:59 UTC] DEBUG: 00000: archived write-ahead log file "000000010000000000000009"
在上述例子中,可以看到在对表执行 INSERT 操作后不久,WAL 文件会在 archive_timeout 指定的间隔内被切换和归档。但是,由于没有生成 WAL 的活动,因此会经过超过 archive_timeout 秒的时间;下一个 WAL 切换仅在执行另一次 INSERT 后才会发生。
归档的 WAL 文件具有正常的磁盘文件大小
$ ls -l /var/lib/postgres/wal-archive/000000010000000000000008 -rw------- 1 postgres postgres 16777216 Apr 1 10:22 /var/lib/postgres/wal-archive/000000010000000000000008
但大部分是空的
$ pg_waldump /var/lib/postgres/wal-archive/000000010000000000000008 rmgr: XLOG len (rec/tot): 49/ 8033, tx: 0, lsn: 0/08000028, prev 0/07000148, desc: FPI_FOR_HINT , blkref #0: rel 1663/14973/1249 blk 17 FPW rmgr: Heap len (rec/tot): 59/ 59, tx: 555, lsn: 0/08001F90, prev 0/08000028, desc: INSERT+INIT off 1 flags 0x00, blkref #0: rel 1663/14973/16470 blk 0 rmgr: Transaction len (rec/tot): 34/ 34, tx: 555, lsn: 0/08001FD0, prev 0/08001F90, desc: COMMIT 2021-04-01 10:22:24.426073 UTC rmgr: Standby len (rec/tot): 54/ 54, tx: 0, lsn: 0/08001FF8, prev 0/08001FD0, desc: RUNNING_XACTS nextXid 556 latestCompletedXid 554 oldestRunningXid 555; 1 xacts: 555 rmgr: XLOG len (rec/tot): 24/ 24, tx: 0, lsn: 0/08002048, prev 0/08001FF8, desc: SWITCH $
参考资料
- PostgreSQL 文档: archive_timeout
