CONFIGURATION PARAMETER复制 / 发送服务器
max_slot_wal_keep_size
设置复制槽可保留的 WAL 最大大小。
Sets the maximum WAL size that can be reserved by replication slots.
整数 重载生效 引入 13 现存至 20 devel 0 次默认值变更
- 类型
- 整数integer
- 上下文
- 重载生效改配置文件后重载(pg_ctl reload / SIGHUP)即可生效
- 默认值
-1 MB原始值 -1 MB- 取值范围
-1 – 2147483647- 分类
- 复制 / 发送服务器
- 引入版本
- 13
- 状态
- 现存
版本轨迹
相对 PostgreSQL 17 仅简述或分类有更新。
默认值变迁
默认值自 PostgreSQL 13 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
指定在检查点时,replication slots(复制槽)允许在pg_wal目录中保留的WAL文件的最大大小。 如果max_slot_wal_keep_size为-1(默认值),复制槽可以保留无限量的WAL文件。否则,如果复制槽的restart_lsn落后于当前LSN超过给定大小, 使用该槽的备机可能由于所需的WAL文件被删除而无法继续复制。您可以在pg_replication_slots中查看复制槽的WAL可用性。 如果未指定单位,则此值将被视为兆字节。此参数只能在postgresql.conf文件或服务器命令行中设置。
机制详解
执行检查点时,PostgreSQL 会比较复制槽的 restart_lsn 与当前 WAL 位置。默认值 -1 表示参数不设上限,因此停滞消费者可能保留足以写满 pg_wal 的 WAL。
设置有限值后,复制槽落后过多时所需段可被释放。槽的 wal_status 可能从 unreserved 变为 lost,消费者可能需要重新做基础备份或逻辑同步。该上限通过牺牲无限期可续传保证来保护主库磁盘。
限制在检查点时执行,因此既不即时,也不是精确字节硬上限。pg_replication_slots 提供 restart_lsn、wal_status、invalidation_reason 和 safe_wal_size,应在触顶前使用这些信号预警。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
在 pg_wal 应急预算内设置有限值,并按峰值 WAL 速率乘以最大修复窗口推导。safe_wal_size 仍为正时就应告警,并为每个消费者记录重新同步路径。
-
OLAP分析与批处理
为预期的批量 WAL 峰值留出空间,但不要让上限形同无限。协调消费者与批任务,验证归档可用性,并在落后消费者耗尽磁盘预算之前暂停或修复它。
-
小规格低配实例与开发机
采用更严格的有限上限和较短修复目标。小卷环境通常应优先保护主库,而不是永远保证陈旧备库或 CDC 槽可续传。
常见问题
- 保留 -1,却认为停滞复制槽不会写满磁盘。
- 把有限值当作即时硬上限,忽略检查点执行时机。
- 设置过小,在计划内批量任务期间使健康消费者失效。
- 认为所需 WAL 删除后消费者仍必然可以续传。
- 把该复制槽保留上限与 wal_keep_size 保留下限混淆。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 20 ← 19 沿用 19
事实沿用 19
-
PostgreSQL 18 ← 17 仅描述更新
补充说明
Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk.Replication slots will be marked as failed, and segments released for deletion or recycling, if this much space is occupied by WAL on disk. -1 means no maximum. -
PostgreSQL 13 ← 12 新增此参数
PostgreSQL 13 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
| 版本 | 默认值 | 单位 | 上下文 | 类型 | 最小值 | 最大值 | 枚举值 |
|---|---|---|---|---|---|---|---|
| 13 | -1 MB |
MB |
重载生效 |
整数 |
-1 |
2147483647 |
— |
| 14 | -1 MB |
MB |
重载生效 |
整数 |
-1 |
2147483647 |
— |
| 15 | -1 MB |
MB |
重载生效 |
整数 |
-1 |
2147483647 |
— |
| 16 | -1 MB |
MB |
重载生效 |
整数 |
-1 |
2147483647 |
— |
| 17 | -1 MB |
MB |
重载生效 |
整数 |
-1 |
2147483647 |
— |
| 18 | -1 MB |
MB |
重载生效 |
整数 |
-1 |
2147483647 |
— |
| 19 | -1 MB |
MB |
重载生效 |
整数 |
-1 |
2147483647 |
— |
| 20 沿用 | -1 MB |
MB |
重载生效 |
整数 |
-1 |
2147483647 |
— |
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 发送服务器 12 | |||||
idle_replication_slot_timeout |
整数 | 重载生效 | 0 s |
— | |
| 设置复制槽保持空闲多久后失效。 | 现存 | ||||
max_repack_replication_slots |
整数 | 重启生效 | 5 |
— | |
| 设置 REPACK 命令可使用的最大复制槽数量。 | 现存 | ||||
max_replication_slots |
整数 | 重启生效 | 10 |
102 次 | |
| 设置可同时定义的复制槽最大数量。 | 现存 | ||||
max_slot_wal_keep_size |
整数 | 重载生效 | -1 MB |
— | |
| 设置复制槽可保留的 WAL 最大大小。 | 现存 | ||||
max_wal_senders |
整数 | 重启生效 | 10 |
103 次 | |
| 设置可同时运行的 WAL sender 进程最大数量。 | 现存 | ||||
output_plugin_libraries |
字符串 | 会话(超级用户) | pgoutput, test_decoding |
— | |
| 列出可作为逻辑解码输出插件指定的库。 | 现存 | ||||
replication_timeout |
整数 | 重载生效 | 1 min |
— | |
| 设置等待 WAL 复制活动的最长时间。 | 于 9.3 移除 | ||||
track_commit_timestamp |
布尔 | 重启生效 | off |
— | |
| 记录事务提交时间。 | 现存 | ||||
wal_keep_segments |
整数 | 重载生效 | 0 |
— | |
| 设置为备库保留的 WAL 文件数量。 | 于 13 移除 | ||||
wal_keep_size |
整数 | 重载生效 | 0 B |
— | |
| 设置为备库保留的 WAL 文件大小。 | 现存 | ||||
wal_sender_shutdown_timeout |
整数 | 会话 | -1 ms |
— | |
| 设置关机时等待 WAL 全部复制到接收端的最长时间。 | 现存 | ||||
wal_sender_timeout |
整数 | 会话 | 1 min |
121 次 | |
| 设置等待 WAL 复制活动的最长时间。 | 现存 | ||||