我一直在尝试将PgPool配置为接受大约150个请求。Postgres服务器配置为仅接受100个连接。任何超过100的数据都需要由PgPool进行池化。我好像不太明白。我只需要PgPool来对请求进行排队,而我当前的配置不能做到这一点。从我的JMeter测试中,当我试图获得超过100的连接时,postgres给我一个错误,说PSQL error: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来对额外的连接请求进行排队,那么上述配置是否正确?请建议正确的配置。
发布于 2013-07-22 20:07:37
pgpool中的'child_max_connections‘不是允许的到数据库的最大连接数。它是池连接在终止和重新启动之前可以使用的次数。它的存在是为了回收连接线程并阻止内存泄漏。
pgpool x num_init_children的公式描述了pgpool将建立到Postgresql的最大连接数。显然,这需要小于postgresql中设置的'max_connections‘,否则pgpool会将数据库标记为不可用的后端。如果您保留了一些供管理员使用的数据库连接,则需要进一步减少pgpool连接的数量。
所以,我要说的是,公式中的“max_connections”是在postgresql.conf中设置的参数。在上面的注释中将'child_max_connections‘设置为100只是意味着pgpool连接每使用100次就关闭并重新打开一次。
发布于 2012-04-29 03:05:31
第一件事是找出您想要的最大池大小。当最大活动连接数约为((2 *核心数)+有效轴计数)时,PostgreSQL性能(在吞吐量和延迟方面)通常最好。有效的磁盘轴计数可能很难计算--例如,如果活动数据集被完全缓存,则将其计算为零。不要将来自超线程的任何额外线程计算为此计算的核心。另请注意,由于网络延迟问题,您可能需要一个略大于计算数量的池来保持该数量的连接活动。您可能需要执行一些基准测试,以找到适合您的硬件和工作负载的最佳位置。
您需要调整的设置是child_max_connections,num_init_children保持小于或等于该值。
https://stackoverflow.com/questions/10362032
复制相似问题