概述 - 目标:通过PgBouncer复用数据库连接,降低连接创建开销,并选择`transaction/session`模式保证功能与性能平衡。 - 适用:高并发短事务场景、微服务与函数式查询负载。 核心与实战 - 配置示例(`pgbouncer.ini`): ``` [databases] app = host=db port=5432 dbname=app user=app_rw password=secret [pgbouncer] listen_port = 6432 listen_addr = 0.0.0.0 auth_type = md5 auth_file = /etc/pgbouncer/userlist.txt pool_mode = transaction max_client_conn = 2000 default_pool_size = 100 reserve_pool_size = 20 server_reset_query = DISCARD ALL ignore_startup_parameters = extra_float_digits server_tls_sslmode = disable ``` - 用户文件: ``` "app_rw" "md5xxxxxxxxxxxxxxxx" ``` - 启动与检查: ``` pgbouncer -d /etc/pgbouncer/pgbouncer.ini psql 'host=127.0.0.1 port=6432 dbname=app user=app_rw password=secret' -c 'SHOW VERSION;' ``` 示例 - 切换为`session`模式(需要会话级特性): ``` pool_mode = session ``` - 观测池与等待: ``` psql -h 127.0.0.1 -p 6432 -U app_rw -d pgbouncer -c 'SHOW POOLS;' psql -h 127.0.0.1 -p 6432 -U app_rw -d pgbouncer -c 'SHOW STATS;' ``` 验证与监控 - 并发效果: - 观察后端连接数是否被池化;客户端连接与等待比例。 - 事务隔离: - `transaction`模式适合短事务;`session`模式保留会话特性(例如临时表)。 - 安全与重置: - 使用`server_reset_query=DISCARD ALL`清理会话状态;避免状态泄露。 常见误区 - 使用`transaction`模式但依赖会话功能(临时表/SET变量);需改为`session`或调整逻辑。 - 池大小过大导致后端连接饱和;需根据数据库资源设定。 - 未配置`ignore_startup_parameters`导致兼容性问题;需忽略不必要参数。 结语 - PgBouncer通过连接池化提升并发与稳定性;合理选择pool_mode与重置策略,可在生产中安全高效地服务多客户端。

发表评论 取消回复