archive_timeout
是一个 配置参数,它决定在 WAL 文件归档之前可以经过的最长时间,无论该文件是否已填满。
archive_timeout
添加于 PostgreSQL 8.2。
用法
通常,WAL 文件一填满就会被归档。但是,如果活动较低,则可能需要一段时间才能归档该文件。通过将 archive_timeout
设置为正值,可以保证在指定的时间间隔后创建一个新的 WAL 文件,并将前一个文件归档,但是只有在产生 WAL 的任何活动的情况下才会这样做。
请注意,如果使用不当,这可能会导致生成大量几乎为空的 WAL 文件,这将占用比必要更多的归档存储空间。
为了确保将 WAL 几乎实时地传输到另一台服务器,建议使用流式复制。
默认值
archive_timeout
的默认值是:0
(禁用)。
按 PostgreSQL 版本查看详情
archive_timeout (PostgreSQL 18)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
设置等待强制切换到下一个 WAL 文件的时间量。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 17)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
设置等待强制切换到下一个 WAL 文件的时间量。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 16)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
设置等待强制切换到下一个 WAL 文件的时间量。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 15)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
设置等待强制切换到下一个 WAL 文件的时间量。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 14)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 13)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 12)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 11)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 10)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 WAL 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 9.6)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 9.5)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
待重启 |
否 |
文档:archive_timeout
archive_timeout (PostgreSQL 9.4)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
文档:archive_timeout
archive_timeout (PostgreSQL 9.3)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
文档:archive_timeout
archive_timeout (PostgreSQL 9.2)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
文档:archive_timeout
archive_timeout (PostgreSQL 9.1)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
文档:archive_timeout
archive_timeout (PostgreSQL 9.0)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/归档 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
文档:archive_timeout
archive_timeout (PostgreSQL 8.4)
设置 |
0 |
单位 |
秒(s) |
类别 |
预写日志/设置 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
枚举值 |
|
启动值 |
0 |
重置值 |
0 |
源文件 |
|
源代码行数 |
|
文档:archive_timeout
archive_timeout (PostgreSQL 8.3)
设置 |
|
单位 |
秒(s) |
类别 |
预写日志/设置 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
1073741823 |
文档:archive_timeout
archive_timeout (PostgreSQL 8.2)
设置 |
|
单位 |
秒(s) |
类别 |
预写日志/设置 |
简短描述 |
如果在 N 秒内未启动新文件,则强制切换到下一个 xlog 文件。 |
额外描述 |
|
上下文 |
sighup |
变量类型 |
整数 |
来源 |
默认 |
最小值 |
0 |
最大值 |
2147483647 |
文档:archive_timeout
更改历史
示例
演示将 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
$