6

我一直在尝试将 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 来排队额外的连接请求,上面的配置是否正确?请告知正确的配置。

4

2 回答 2

5

pgpool 中的 'child_max_connections' 不是数据库允许的最大连接数。它是池连接在终止和重新启动之前可以使用的次数。它可以回收连接线程并阻止内存泄漏。

max_pool x num_init_children 的公式描述了 pgpool 将与 Postgresql 建立的最大连接数。显然,这需要小于 postgresql 中设置的 'max_connections',否则 pgpool 会将数据库标记为不可用的后端。如果您保留了一些数据库连接供管理员使用,则需要进一步减少 pgpool 连接的数量。

所以,我要说的是公式中的'max_connections'是postgresql.conf中设置的参数。在上面的注释中将 'child_max_connections' 设置为 100 只是意味着 pgpool 连接每使用 100 次就会关闭并重新打开。

于 2013-07-22T12:07:36.860 回答
2

首先是弄清楚你想要的最大池大小。当最大活动连接数大约为((2 * 核心数)+ 有效主轴计数)时,PostgreSQL 性能(在吞吐量和延迟方面)通常是最好的。计算有效的主轴数可能很棘手——例如,如果您的活动数据集已完全缓存,则将其计为零。不要将来自超线程的任何额外线程算作此计算的核心。另请注意,由于网络延迟问题,您可能需要一个比计算出的数量略大的池来保持该数量的活动连接。您可能需要做一些基准测试来找到适合您的硬件和工作负载的最佳位置。

您需要调整的设置是child_max_connectionsnum_init_children保持小于或等于。

于 2012-04-28T19:05:31.143 回答