我在事务模式下使用 pgbouncer 并试图允许接近 500 个活动事务。目的只是对设置进行压力测试
当前设置:[ 'n' 个客户端 --->1 pgbouncer ----> 1 postgres ]
我注意到当我使用 pgbouncer 而不是直接连接到 postgres 时,我的事务/秒 (tps) 显着降低。
对于同一组事务(通过 pgbench)
直接连接 => 10k (tps) appx
pgbouncer 连接 => 3k (tps) appx
pgbouncer 中是否有任何配置需要调整以提供更好的性能?
我了解 pgbouncer 是一个单线程应用程序,但希望将其调优至最佳状态。以下是我的 pgbouncer 配置:
弹跳器.ini
pool_mode = transaction
server_reset_query =
# Time outs
server_lifetime=6000
server_idle_timeout=0
server_connect_timeout=30
#pool configuration
max_client_conn=10000
default_pool_size=500
pool_size=500
##other
pkt_buf=4096
server_login_retry=2
我能看到的唯一应用是使用多个 pgbouncers 指向同一个数据库服务器。
更新
在执行测试时:
cpu 利用率:30% appx
磁盘利用率:40% appx
观察:许多交易处于“空闲”状态
测试细节:
10 台机器作为客户端向 DB 服务器运行 pgbench 触发请求。
命令:pgbench -h -p 6541 -c 512 -j 16 -f pgbench_SchemaScript.sql -T 360 -U postgres 测试
pgbench_SchemaScript.sql
\setrandom delta 0 100000
insert into t1.emplog values(nextval('t1.employeeSeq'),:delta);
1 个安装了 pgbouncer 的数据库服务器(16 核,24 Gb RAM)