3

我正在对 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 配置是否无法处理大型连接?

4

1 回答 1

0

您是将“-c”设置为空白还是问题中的拼写错误?'-c' 设置 pgbench 命令的客户端数量。从 100 开始,然后对于每个运行 pgbench 的实例慢慢移动到 1000。

pgbench -h -p 6541 -c 100 -j 16 -d -f pgbench_Script.sql -T 360 -U postgres test
于 2018-10-01T06:47:17.570 回答