
title: Use Connection Pooling for All Applicationsimpact: CRITICALimpactDescription: Handle 10-100x more concurrent userstags: connection-pooling, pgbouncer, performance, scalability所有应用程序都应使用连接池Postgres 连接代价高昂每个连接占用 1-3MB 内存。没有连接池时应用程序在高负载下会耗尽连接。错误做法每个请求新建连接-- 每个请求都会创建新连接-- 应用程序代码每个请求执行 db.connect()-- 结果500 个并发用户 500 个连接 数据库崩溃-- 检查当前连接数selectcount(*)frompg_stat_activity;-- 487 个连接正确做法连接池-- 在应用程序与数据库之间使用类似 PgBouncer 的池化器-- 应用程序连接到池化器池化器复用与 Postgres 之间的小型连接池-- 根据 (CPU 核心数 * 2) 磁盘数 配置 pool_size-- 以 4 核为例pool_size 10-- 结果500 个并发用户共享 10 个实际连接selectcount(*)frompg_stat_activity;-- 10 个连接连接池模式事务模式每个事务结束后归还连接最适合大多数应用会话模式连接在整个会话期间保持用于预处理语句、临时表参考连接池