我一直在尝试配置PgPool接受大约150的请求.Postgres服务器配置为只接受100个连接。超过100的任何东西都需要由PgPool汇集。我似乎没有那样做。我只需要PgPool对请求进行排队,我当前的配置不会这样做。从我的JMeter测试中,当我尝试连接超过100时,postgres给出了一个错误,指出PSQL错误:sorry, too many clients
。
我只使用以下参数配置了PGPool:
listen_address = 'localhost'
port = 9999
backend_hostname0 = 'localhost'
backend_port0 = 5432
num_init_children = 100
max_pool = 4
child_life_time =120
child_max_connections = 0
connections_life_tome = 120
client_idle_limit = 0
由于我只需要PgPool对额外连接请求进行排队,上述配置是否正确? 请告知正确的配置。
答案 0 :(得分:5)
pgpool中的'child_max_connections'不是允许连接到DB的最大连接数。它是池终止和重新启动之前可以使用池连接的次数。它可以回收连接线程并阻止内存泄漏。
max_pool x num_init_children的公式描述了pgpool将对Postgresql进行的最大连接数。显然,这需要小于postgresql中设置的'max_connections',否则pgpool会将DB标记为不可用的后端。如果您为管理员使用保留了一些数据库连接,则需要进一步减少pgpool连接的数量。
所以,我所说的是公式中的'max_connections'是postgresql.conf中设置的参数。在上面的注释中将'child_max_connections'设置为100只意味着pgpool连接每100次关闭并重新打开。
答案 1 :(得分:2)
首先要弄清楚你想要的最大游泳池大小。当最大活动连接数在某处((2 *核心数)+有效主轴数)时,PostgreSQL性能(在吞吐量和延迟方面)通常是最佳的。有效的主轴数量可能很难确定 - 例如,如果您的活动数据集已完全缓存,则将其计为零。不要将超线程中的任何额外线程计为此计算的核心。另请注意,由于网络延迟问题,您可能需要一个比计算数量略大的池,以保持连接数活动。您可能需要做一些基准测试,以找到硬件和工作负载的最佳位置。
您需要调整的设置为child_max_connections
,num_init_children
保持小于或等于该值。