我正在对 5000 个连接的 pgbouncer 进行压力测试。测试的目的是使用 pgbouncer 多路复用连接,即 5000 个客户端连接到 500 个 db 连接。
但是,我无法实现主动 500 连接标记的目标。
我的设置非常简单
(客户端使用 pgbench 设置)----->pgbouncer + psql
|______多个盒子______||______1个盒子_________|
pgbouncer 和 postgres 出现在同一个框中。
pgbouncer = 1 个核心(预期)
postgres = 15 个核心(预期)
机器配置:
16核
ulimit -n 10000
Postgres 配置:
最大连接数 = 500
shared_buffers = 1GB
work_mem = 100kB
pgbouncer 配置:
pool_mode = 交易
server_lifetime=6000
server_idle_timeout=2000
server_connect_timeout=30
default_pool_size=500
池大小=500
pkt_buf=4096
server_login_retry=2
客户端配置(8个盒子,每个8核):
每个客户端框模拟为一组使用 pgbench 的客户端对于一个 8 核框,我设置了 16 个线程来触发查询
pgbench -h -p 6541 -c -j 16 -d -f pgbench_Script.sql -T 360 -U postgres 测试
pgbench_Script.sql
\setrandom delta 0 100000 插入到 t4.emplog values(nextval('t4.employeeSeq'),:delta);
postgres 上的主动查询:
select count(*) from pg_stat_activity where state like 'active';
count
-------
40
我的期望是通过连接池有接近 500 个活动连接到数据库。 问题:我只看到少数连接 ~ 40 个活动连接
观察: 我看到多个 postgres 进程处于“空闲”状态,尽管 pgbouncer 已经为所有客户端提供服务。提示 pgbouncer 无法发挥到最佳。但是,我无法确定确切的瓶颈是什么。
潜在瓶颈:
客户端请求: pgbench 使每个线程成为连接集合的主人。如何模拟大量活动的并发连接?
pgbouncer:我的 pgbouncer 配置有缺陷吗?
postgres:我的 postgres 配置是否无法处理大型连接?