CONFIGURATION PARAMETER资源消耗 / 内存
shared_memory_type
选择主共享内存区域的实现。
Selects the shared memory implementation used for the main shared memory region.
枚举 重启生效 引入 12 现存至 20 devel 0 次默认值变更
版本轨迹
相对 PostgreSQL 17 无变化。
默认值变迁
默认值自 PostgreSQL 12 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
指定服务器应用于主共享内存区域的共享内存实现,包括 PostgreSQL 的共享缓冲区和其他共享数据。 可能的值为 mmap (对使用 mmap 分配的匿名共享内存),sysv (通过 shmget 分配的系统V 共享内存),和windows (Windows共享内存)。 并非在所有平台上都支持全部值;第一个被支持的选项是该平台的默认选项。 sysv 选项不是任何平台的默认选项,通常不建议使用,因为它通常需要非默认的内核设置来允许大量的地址分配(参见 Section 18.4.1)。
机制详解
shared_memory_type 选择 PostgreSQL 主共享内存区域使用的操作系统机制,其中包含 shared_buffers 与其他固定共享状态;它不设置区域大小。
可用枚举值与第一个受支持的启动默认值依平台而定。Docker/Linux 目录实测为 mmap;Windows 有自己的实现,sysv 在大分配时可能需要非默认内核限制。
Linux 上显式 huge_pages 需要 mmap。该参数不同于 dynamic_shared_memory_type,后者管理并行查询与扩展使用的临时动态段。其 postmaster 上下文在服务器启动时固定取值,修改后必须重启。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
保留平台第一个受支持默认实现;Linux 通常是 mmap,且 PostgreSQL 显式大页要求它。只有明确兼容需求才用 sysv,并在重启前配置好内核限制。
-
OLAP分析与批处理
shared_buffers 很大时,可靠分配主共享区域更重要,但负载标签不决定 API。应在目标操作系统验证启动、大页、故障转移与服务限制,而不是基准存储吞吐。
-
小规格低配实例与开发机
保留平台默认。更换实现不会减小已配置共享内存大小,反而可能增加内核限制或可移植性故障。
常见问题
- 把 Linux-Docker 的 mmap boot 值当成所有操作系统的可移植默认。
- 没有提高主区域所需 System V 共享内存内核限制就选择 sysv。
- 忘记 Linux 上显式大页要求 shared_memory_type=mmap。
- 期待该参数改变 shared_buffers 或其他共享分配的大小。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 20 ← 19 沿用 19
事实沿用 19
-
PostgreSQL 12 ← 11 新增此参数
PostgreSQL 12 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
| 版本 | 默认值 | 单位 | 上下文 | 类型 | 最小值 | 最大值 | 枚举值 |
|---|---|---|---|---|---|---|---|
| 12 | mmap |
— |
重启生效 |
枚举 |
— |
— |
sysv, mmap |
| 13 | mmap |
— |
重启生效 |
枚举 |
— |
— |
sysv, mmap |
| 14 | mmap |
— |
重启生效 |
枚举 |
— |
— |
sysv, mmap |
| 15 | mmap |
— |
重启生效 |
枚举 |
— |
— |
sysv, mmap |
| 16 | mmap |
— |
重启生效 |
枚举 |
— |
— |
sysv, mmap |
| 17 | mmap |
— |
重启生效 |
枚举 |
— |
— |
sysv, mmap |
| 18 | mmap |
— |
重启生效 |
枚举 |
— |
— |
sysv, mmap |
| 19 | mmap |
— |
重启生效 |
枚举 |
— |
— |
sysv, mmap |
| 20 沿用 | mmap |
— |
重启生效 |
枚举 |
— |
— |
sysv, mmap |
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 内存 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 次 | |
| 设置查询工作区可使用的最大内存。 | 现存 | ||||