当用户与PostgreSQL建立连接时,先与postmaster进程建立连接,然后postmater fork一个子进程给这个连接。对于创建的每个连接,操作系统都需要为打开网络套接字的进程分配内存,最多扩展到数千个连接后,而只为用户准备使用数据库的阶段就浪费了很多时间。
设置较高max_connections也涉及到其他成本比如磁盘争用,造成过多的io等待;操作系统调度甚至CPU级别的缓存争用。
同时,对于每一个连接,在shared memory中都有一个结构体PGPROC用于追踪正在运行的后端进程和事务
这些是PostgreSQL本身的情况,当连接数上来之后,这些也是可能的瓶颈。同样,连接数上来之后,每个后端进程起始大小大约为5MBÿ