跳转到主要内容

max_connections

PostgreSQL 客户端并发连接的启动时上限,也是多项共享资源的尺寸输入。
说明

Fact — 官方简述译文:设置数据库并发连接的最大数量。

身份

类型 , integer
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 , 1262143
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Connections and Authentication / Connection Settings
上游分类
最后 boot 值 , 100
100

生命周期

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

默认值变迁

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

机制详解

max_connections 限制数据库服务器的并发连接数,只能在服务器启动时修改。PostgreSQL 会直接按该值确定部分资源规模,因此即使连接槽未全部使用,调高上限也会增加包括共享内存在内的分配。

reserved_connections 与 superuser_reserved_connections 从同一个总上限中划出应急或特权容量,因此普通应用通常不能占满所有配置槽位。

备用库的取值必须不低于主库。连接池可以把大量客户端连接与较少、受控的 PostgreSQL 后端连接解耦。

调优建议

提示

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

场景 建议
OLTP 面对大量客户端时优先使用事务池,按峰值活跃数据库工作量,加上监控、维护和故障转移余量来确定后端数;不要默认把每个客户端连接映射为一个服务器槽位。
OLAP 分析会话通常更少但更重,应把后端上限控制在能约束 work_mem 与并行工作进程总需求的范围,并为 ETL 与管理预留明确容量。
小规格 使用较低上限配合连接池并保留应急槽位。验证启动所需共享内存,不要通过不断提高上限掩盖连接泄漏。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 500 不同于 boot 值 {{ pg_max_connections }}
OLAP 500 不同于 boot 值 {{ pg_max_connections }}
CRIT 500 不同于 boot 值 {{ pg_max_connections }}
TINY 250 不同于 boot 值 {{ pg_max_connections }}
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 500 (dcs);OLAP: PG9.0–19 Beta 3 = 500 (dcs);CRIT: PG9.0–19 Beta 3 = 500 (dcs);TINY: PG9.0–19 Beta 3 = 250 (dcs)。 建议(待人工复核)——编辑推断:模板在连接池后提供较宽松的兼容性上限,并为小节点降低上限,但实际活跃后端数与内存边界仍需按负载复核。

常见坑

  • 修改后没有安排重启,也没有保证备用库取值至少与主库相同。
  • 忽略更高连接上限带来的共享内存与每后端开销。
  • 计算应用容量时忘记预留连接与超级用户预留槽。
  • 同时使用很高的连接上限和宽松的单操作内存,却认为二者不会相乘。

reserved_connections · superuser_reserved_connections · work_mem · max_worker_processes · max_prepared_transactions · max_wal_senders

参考资料