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

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

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

CONFIGURATION PARAMETER资源消耗 / 内存

dynamic_shared_memory_type

选择动态共享内存实现。

Selects the dynamic shared memory implementation used.

枚举 重启生效 引入 9.4 现存至 20 devel 0 次默认值变更

类型
枚举enum
上下文
重启生效只能在服务器启动时设置,修改后需要重启
默认值
posix
枚举值
posix, sysv, mmap
引入版本
9.4
状态
现存

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

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

posix 9.4 – 20

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

手册说明

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

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

指定服务器应该使用的动态共享内存实现。可能的值包括posix(使用shm_open分配的POSIX共享内存), sysv(通过shmget分配的System V共享内存), windows(用于Windows共享内存), 和mmap(使用存储在数据目录中的内存映射文件模拟共享内存)。 并非所有平台都支持所有值;通常第一个支持的选项是该平台的默认值。 通常不建议使用mmap选项,因为操作系统可能会反复将修改的页面写回磁盘,增加系统I/O负载; 但在调试时,当pg_dynshmem目录存储在RAM磁盘上,或者其他共享内存设施不可用时,可能会有用。 该参数只能在服务器启动时设置。

机制详解

dynamic_shared_memory_type 选择 PostgreSQL 创建动态共享内存段的方法,供并行查询与扩展使用;受支持实现包括 POSIX、System V、Windows 和文件后端 mmap。

可用枚举值与启动默认值依平台而定。Docker/Linux 目录实测为 posix,这不代表 Windows 或缺少 POSIX 共享内存的系统也相同。

mmap 实现把映射文件放在 pg_dynshmem,一般不推荐,因为脏页可能被反复写盘。min_dynamic_shared_memory 可在主共享区域预分配一部分并行查询内存。其 postmaster 上下文在服务器启动时固定取值,修改后必须重启。

调优建议

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

  • OLTP在线事务处理

    保留平台第一个受支持默认实现;实测 Linux 镜像通常是 posix。只有解决 API 可用性或诊断需求时才修改,并在目标 OS 重启测试并行查询与扩展 worker。

  • OLAP分析与批处理

    并行查询会大量使用动态段,但应按 OS 支持与分配行为选择实现,不能只看扫描吞吐。普通磁盘上避免 file-backed mmap,因为反复回写会增加 I/O;RAM disk 只是特殊诊断场景。

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

    保留平台默认。sysv 可能需要内核调优,file-backed mmap 会把内存流量变成磁盘 I/O;两者都不是免费降低内存的方法。

常见问题

  • 把 Linux-Docker 的 posix boot 值外推到不支持 POSIX 共享内存的平台。
  • 在普通存储上使用 file-backed mmap,造成脏页反复回写。
  • 选择 sysv 前没有检查 System V 段限制。
  • 把动态段与 shared_memory_type 选择的主共享区域混淆。
  • 修改启动设置后没有测试会分配 DSM 的并行查询与扩展。

演化历史

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

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 12 ← 11 属性变更

    枚举值 posix, sysv, mmap, none posix, sysv, mmap

  3. PostgreSQL 9.4 ← 9.3 新增此参数

    PostgreSQL 9.4 起可用

逐版本快照

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

版本 默认值单位上下文类型最小值最大值枚举值
9.4 posix 重启生效 枚举 posix, sysv, mmap, none
9.5 posix 重启生效 枚举 posix, sysv, mmap, none
9.6 posix 重启生效 枚举 posix, sysv, mmap, none
10 posix 重启生效 枚举 posix, sysv, mmap, none
11 posix 重启生效 枚举 posix, sysv, mmap, none
12 posix 重启生效 枚举 posix, sysv, mmap
13 posix 重启生效 枚举 posix, sysv, mmap
14 posix 重启生效 枚举 posix, sysv, mmap
15 posix 重启生效 枚举 posix, sysv, mmap
16 posix 重启生效 枚举 posix, sysv, mmap
17 posix 重启生效 枚举 posix, sysv, mmap
18 posix 重启生效 枚举 posix, sysv, mmap
19 posix 重启生效 枚举 posix, sysv, mmap
20 沿用 posix 重启生效 枚举 posix, sysv, mmap

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
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 次
设置查询工作区可使用的最大内存。 现存