连接池
PostgreSQL 中的连接池是什么?
连接池保持一组已打开的数据库连接,并在众多客户端之间共享,因为每个 PostgreSQL 连接都由一个独立的服务器进程提供服务。
PostgreSQL 采用每用户一个进程的模型:每个客户端连接都由服务器上一个独立的后端进程提供服务,max_connections 设置限制了同时存在的连接数上限。连接池位于应用程序和数据库之间,保持有限数量的服务器连接,并按需分配给客户端。
连接池可以位于应用程序内部(大多数驱动和 ORM 都自带连接池),也可以是部署在服务器前面的独立连接池程序,例如 PgBouncer。在事务级连接池模式下,每个事务结束后服务器连接就会归还给连接池,因此下一个事务可能运行在另一个连接上。任何依赖会话状态的功能,例如会话级的 SET 命令或临时表,在这种模式下都需要谨慎处理。
示例
该示例显示服务器的连接数上限,并按状态统计当前的客户端连接数。大量空闲连接通常意味着使用连接池会有帮助。
SHOW max_connections;
SELECT state, count(*)
FROM pg_stat_activity
WHERE backend_type = 'client backend'
GROUP BY state;适用于原生 PostgreSQL 16 或 17 的纯 SQL,无需任何扩展。请在一个可随时丢弃的空数据库中运行。
参考资料
PostgreSQL 官方文档(英文)。