跳转到主要内容

max_files_per_process

max_files_per_process:设置每个服务器进程可同时打开的最大文件数。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 1000,context 为 postmaster。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置每个服务器进程可同时打开的最大文件数。

身份

类型 , integer
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 , 642147483647
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Resource Usage / Kernel Resources
上游分类
最后 boot 值 , 1000
1000

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 1000 1000

机制详解

max_files_per_process 是 PostgreSQL 启动时对单个服务器子进程可保持打开文件数的预期,不含从 postmaster 继承且已打开的文件。

它不会提高内核文件描述符限制。PostgreSQL 用它管理资源;在会跨进程过度承诺描述符的内核上,较低值可避免系统级耗尽。

相关容量是每进程值乘以后端与 worker 数量。出现“Too many open files”还可能需要修复 OS 服务限制、连接数、分区扇出或扩展行为。其 postmaster 上下文在服务器启动时固定取值,修改后必须重启。

调优建议

提示

Advice。 以下建议是工作负载起点,必须用真实测量验证。

场景 建议
OLTP 先把 PostgreSQL 取值与服务真实每进程 nofile 限制及已观测描述符用量比较。提高该 GUC 不会提高内核限制;会跨大量进程过度承诺描述符的系统上,降低 PostgreSQL 值反而更安全。
OLAP 大量分区或索引扇出会增加单后端描述符,但应按实测峰值打开数与后端/worker 总量规划。修改 PostgreSQL 上限前先解决泄漏与 OS 服务限制。
小规格 除非描述符证据表明需要修改,否则保留默认。即使每个进程都低于个体上限,小主机仍可能耗尽系统级文件表。

Pigsty 取值

以下值来自固定 8 核、32 GiB、100 GiB SSD 夹具,并按 PG19 Beta 3 渲染当前 Pigsty 模板;这不表示 Pigsty 当前支持该历史或测试版本。

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 未修改;OLAP: PG9.0–19 Beta 3 未修改;CRIT: PG9.0–19 Beta 3 未修改;TINY: PG9.0–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 期待该 GUC 提高 ulimit 或服务管理器的 nofile 限制。
  • 只规划每进程数量,忽略连接与 worker 汇总值。
  • 通过提高取值掩盖描述符泄漏或过高分区/索引扇出。
  • 忘记从 postmaster 继承且已打开的文件不计入本数值。

max_connections · max_worker_processes · max_wal_senders · shared_preload_libraries

参考资料