Postgresql 如何配置postgres+;pgbouncer允许大量连接

Postgresql 如何配置postgres+;pgbouncer允许大量连接,postgresql,postgresql-9.3,pgbouncer,Postgresql,Postgresql 9.3,Pgbouncer,我正在对5000个连接的pgbouncer进行压力测试。 测试的目的是使用pgbouncer多路传输连接,即从5000个客户端连接到500 db连接 但是,我无法实现活动500连接标记的目标 我的设置非常简单 (使用pgbench的客户端设置)--->pgbouncer+psql |______多个盒子uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu_________| pgbo

我正在对5000个连接的pgbouncer进行压力测试。 测试的目的是使用pgbouncer多路传输连接,即从5000个客户端连接到500 db连接

但是,我无法实现活动500连接标记的目标

我的设置非常简单

(使用pgbench的客户端设置)--->pgbouncer+psql

|______多个盒子uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu_________|

pgbouncer和postgres位于同一个框中

pgbouncer=1芯(期望值)

博士后=15个核心(预期)

  • 机器配置

    16芯

    ulimit-n 10000

  • Postgres配置

    最大连接数=500

    共享缓冲区=1GB

    工作记忆=100kB

  • pgbouncer配置

    池模式=事务

    服务器生命周期=6000

    服务器空闲超时=2000

    服务器连接超时=30

    默认池大小=500

    池大小=500

    pkt_buf=4096

    服务器\登录\重试=2

  • 客户端配置(8个盒子,每个8个核心):

    每个客户端框模拟为使用pgbench的客户端的一组 对于一个8核的盒子,我设置了16个线程来触发查询

    pgbench-h-p6541-c-j16-d-f pgbench_Script.sql-t360-U postgres测试

    pgbench_Script.sql

    \setrandom delta 0 100000 在t4.EmployeLog值中插入(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配置是否无法处理大型连接?

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

pgbench -h -p 6541 -c 100 -j 16 -d -f pgbench_Script.sql -T 360 -U postgres test

单个postgres实例上的500个连接太高。它应该高于
%CPU核心计数%*2
。我知道它很高,但这更像是一个压力测试设置,用于识别故障点。如果连接数超过%CPU core count%*2,是否会产生任何影响?请阅读这篇文章:它为您提供了最佳连接数的估计和推理。至于压力测试-使用正确配置的连接池(如
pgbouncer
),您的postgres连接数将永远不会超过最佳连接数。我看不出压力测试对于不应该发生的情况有什么意义。@Igor:测试的目的是检查由于高负载而能够实现的每秒事务数(tps)。在直接连接的情况下,我可以获得约11k tps,而使用pgbouncer,我可以获得约3k(500个连接)。在使用pgbouncer时,我注意到我的大多数连接处于“空闲”状态&我正在尝试解决这个问题。使用直接连接时,我看不到这种“空闲”行为。