1. 什么是 PgBouncer?
PgBouncer 是一个轻量级的 PostgreSQL 连接池工具,主要用于管理和复用数据库连接,减少频繁建立和断开连接的开销,从而提升数据库性能和并发处理能力。
2. PgBouncer 的三种连接池模式
PgBouncer 支持三种主要的连接池模式,每种模式对应不同的会话管理策略:
- Session 模式:客户端在整个会话期间保持一个数据库连接。
- Transaction 模式:客户端在事务期间保持一个数据库连接,事务结束后连接归还给连接池。
- Statement 模式:客户端每条 SQL 语句执行后连接立即归还给连接池。
3. Session 模式详解
3.1 工作原理
在 Session 模式下,当客户端连接到 PgBouncer 时,PgBouncer 会从连接池中分配一个 PostgreSQL 后端连接给该客户端。这个连接会在整个客户端会话期间保持,直到客户端主动断开连接或连接超时。
3.2 适用场景
- 需要保持会话状态的应用(如使用了临时表、会话变量等)。
- 长时间运行的客户端连接。
- 需要保持事务边界外的连接状态的场景。
3.3 配置示例
[databases] mydb = host=127.0.0.1 port=5432 dbname=mydb [pgbouncer] pool_mode = session max_client_conn = 100 default_pool_size = 203.4 优缺点分析
优点:
- 会话状态保持完整,不会丢失临时表、会话变量等。
- 连接复用效率高,适