中间件速查手册
关系型数据库Process per Connection

进程模型 是什么?

每个连接 fork 一个独立进程,而不是线程池

类比:一个客户配一个专属柜员,不用排队等公共窗口

怎么工作

postmaster 是主进程,监听 5432 端口。每来一个连接就 fork 一个 backend 进程,这个进程负责该连接的全部工作:解析 SQL、执行计划、读写共享缓冲。

好处是隔离性强:某个连接把内存搞崩,不会影响其他连接;坏处是每个进程都有独立内存开销,连接数一多,上下文切换和内存都吃不消。

为什么要连接池

几百个连接意味着几百个进程,而真正在干活的可能只有几个。标准做法是在前面挂 pgbouncer(事务级池化),把上千个客户端连接收敛成几十个真实连接。

PG 还有个“后端进程”的连带成本:每个连接默认要分配 work_mem 等资源,连接数爆炸时容易 OOM。

和 MySQL 的差别

MySQL 是一进程多线程,连接是线程,开销小、切换快,但一个线程崩溃可能拖垮整个进程。两种模型各有取舍,这也是 PG 更强调连接池的原因。

它出现在这些中间件里

相关概念