SuperAPI AI 工具集

postgres-connection-pooling

数据与分析

查看项目

更新于 10-15 20:30

技能介绍

用途:帮助为 Postgres 选择匹配工作负载的连接池模式,核心原则是按应用使用的会话状态选模式,而非按并发量。

主要能力:对比 pgBouncer 三种模式。Session 模式每个客户端独占一个后端连接,支持全部 PostgreSQL 特性;Transaction 模式按事务复用后端,多路复用但会破坏 SET、LISTEN、WITH HOLD 游标、会话级咨询锁、SQL 级 PREPARE 等;Statement 模式按语句复用,禁止多语句事务。给出特性兼容表与决策流程图。

预处理语句:pgBouncer 1.21+ 支持协议级命名预处理语句,1.22+ 默认 max_prepared_statements=200;但 SQL 级 PREPARE/EXECUTE/DEALLOCATE 仍不被跟踪,且列变更迁移后可能触发 cached plan must not change result type,需滚动重启或 DISCARD ALL。列出各客户端关闭方式,如 postgres-js 的 prepare: false、asyncpg 的 statement_cache_size=0、Prisma 的 ?pgbouncer=true。

Supabase:直连 5432、Supavisor session 5432、transaction 6543;Supavisor 与 PgBouncer 共享 max_connections 预算。

RDS Proxy:SET、PREPARE、临时对象、超过 16 KB 的语句都会导致会话固定,Postgres 不支持固定过滤,缓解方式是把初始化 SQL 移入 InitQuery 并避免临时表。

诊断与限制:用 pg_stat_activity 查询长时间 idle in transaction 的会话,建议集群级设置 idle_in_transaction_session_timeout='60s';有连接池时慎用 idle_session_timeout。另列出连接串速查与常见反模式。不涵盖 ORM 专属配置、复制、非 Postgres 池化及通用性能调优。