选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 配置参数 / 资源消耗

CONFIGURATION PARAMETER资源消耗 / 内存

logical_decoding_work_mem

设置逻辑解码使用的最大内存。

Sets the maximum memory to be used for logical decoding.

整数 会话 引入 13 现存至 20 devel 0 次默认值变更

类型
整数integer
上下文
会话任何用户都可在会话内用 SET 修改
默认值
64 MiB原始值 65536 kB
取值范围
64 – 2147483647
引入版本
13
状态
现存

PostgreSQL 18 手册 官方文档 引入提交 cec2edfa78

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

64 MiB 13 – 20

默认值自 PostgreSQL 13 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18 手册 · 19.4 资源消耗 本站手册 官方原文

本版译文与 PostgreSQL 13 完全一致,下面就是同一段文字。

指定逻辑解码要使用的最大内存量,在将某些解码的更改写入本地磁盘之前。 这将限制逻辑流复制连接使用的内存量。它默认为 64 兆字节(64MB)。 由于每个复制连接仅使用此大小的单个缓冲区,并且安装通常不会同时具有多个此类连接(受 max_wal_senders 的限制),因此将此值设置得明显高于 work_mem是安全的,从而减少写入磁盘的解码更改数量。

机制详解

logical_decoding_work_mem 是单条逻辑解码流把变更写入本地临时文件之前可使用的真实内存阈值,与普通查询 work_mem 相互独立。

每个复制连接使用一个这样的缓冲区,并发由复制 sender 能力而不是普通客户端会话限制。大型进行中事务可能落盘并在以后重新读取。

提高阈值可减少逻辑复制序列化 I/O,但集群内存预算必须乘以并发解码流数,并计入此参数未覆盖的输出插件内存。其 user 上下文允许按会话或事务局部修改,之后执行或重新规划的工作会读取新值。

调优建议

按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。

  • OLTP在线事务处理

    只有在并发下定位到对应资源瓶颈后才修改 logical_decoding_work_mem。应预算总内存、I/O、磁盘或内核容量,而不是孤立优化一个进程。

  • OLAP分析与批处理

    使用代表性的批处理与扫描阶段测试 logical_decoding_work_mem,同时观察持续吞吐、落盘/回写及对其他会话的干扰,不能只看单次操作耗时。

  • 小规格低配实例与开发机

    小主机上应保守设置 logical_decoding_work_mem;证据不足时优先上游默认。照搬大服务器取值可能占用不成比例的资源。

常见问题

  • 修改 logical_decoding_work_mem 时忽略文档单位与配置生效上下文。
  • 只优化孤立基准,却忽略并发后的资源总量。
  • 认为配置值能够保证操作系统或存储层实际行为。
  • 修改后没有重新验证启动、故障转移与负载延迟。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 13 ← 12 新增此参数

    PostgreSQL 13 起可用

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
13 64 MiB kB 会话 整数 64 2147483647
14 64 MiB kB 会话 整数 64 2147483647
15 64 MiB kB 会话 整数 64 2147483647
16 64 MiB kB 会话 整数 64 2147483647
17 64 MiB kB 会话 整数 64 2147483647
18 64 MiB kB 会话 整数 64 2147483647
19 64 MiB kB 会话 整数 64 2147483647
20 沿用 64 MiB kB 会话 整数 64 2147483647

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Resource Usage 资源消耗 23 个
内存 23
autovacuum_work_mem 整数 重载生效 -1 kB
设置每个 autovacuum 工作进程可使用的最大内存。 现存
commit_timestamp_buffers 整数 重启生效 0 B (0 × 8kB)
设置提交时间戳缓存专用缓冲池的大小。 现存
dynamic_shared_memory_type 枚举 重启生效 posix 121 次
选择动态共享内存实现。 现存
hash_mem_multiplier 浮点 会话 2 151 次
以 work_mem 的倍数确定哈希表内存上限。 现存
huge_page_size 整数 重启生效 0 B
设置 PostgreSQL 请求的显式大页大小。 现存
huge_pages 枚举 重启生效 try
控制在 Linux 或 Windows 上使用大页。 现存
logical_decoding_work_mem 整数 会话 64 MiB
设置逻辑解码使用的最大内存。 现存
maintenance_work_mem 整数 会话 64 MiB 172 次
设置维护操作可使用的最大内存。 现存
max_prepared_transactions 整数 重启生效 0 9.62 次
设置可同时处于 prepared 状态的事务上限。 现存
max_stack_depth 整数 会话(超级用户) 100 KiB
设置 PostgreSQL 认为安全的最大执行栈深度。 现存
min_dynamic_shared_memory 整数 重启生效 0 B
设置启动时为并行查询预留的动态共享内存。 现存
multixact_member_buffers 整数 重启生效 256 KiB (32 × 8kB)
设置 MultiXact member 缓存专用缓冲池的大小。 现存
multixact_offset_buffers 整数 重启生效 128 KiB (16 × 8kB)
设置 MultiXact offset 缓存专用缓冲池的大小。 现存
notify_buffers 整数 重启生效 128 KiB (16 × 8kB)
设置 LISTEN/NOTIFY 消息缓存专用缓冲池的大小。 现存
replacement_sort_tuples 整数 会话 150000
设置使用替换选择排序的最大元组数。 于 11 移除
serializable_buffers 整数 重启生效 256 KiB (32 × 8kB)
设置可串行化事务缓存专用缓冲池的大小。 现存
shared_buffers 整数 重启生效 128 MiB (16384 × 8kB) 151 次
设置服务器使用的共享缓冲区数量。 现存
shared_memory_type 枚举 重启生效 mmap
选择主共享内存区域的实现。 现存
subtransaction_buffers 整数 重启生效 0 B (0 × 8kB)
设置子事务状态缓存专用缓冲池的大小。 现存
temp_buffers 整数 会话 8 MiB (1024 × 8kB)
设置每个会话使用的最大临时缓冲区内存。 现存
transaction_buffers 整数 重启生效 0 B (0 × 8kB)
设置事务状态缓存专用缓冲池的大小。 现存
vacuum_buffer_usage_limit 整数 会话 2 MiB 171 次
设置 VACUUM、ANALYZE 与 autovacuum 的缓冲区访问环大小。 现存
work_mem 整数 会话 4 MiB 9.41 次
设置查询工作区可使用的最大内存。 现存