如何计算PostgreSQL的max_connections和pgbouncer的default_pool_size?

是否有规则或我可以用来计算max_connectionsdefault_pool_sizemax_client_conn一个好的数字?

默认值是奇数。 PostgreSQL默认为max_connections = 100,而pgbouncer默认为default_pool_size = 20。 不应该default_pool_size总是高于max_connections? 否则,有什么意义? 我认为pgbouncer是为了让我们通过降低开销(通过重用PostgreSQL的连接)来处理更多的连接。 我很困惑。

我正在寻找类似于在PostgreSQL wiki中find的build议,比如“这个参数应该是你内存的50%”。

我记得有一个MySQL的电子表格,可以让你计算这些参数。 对于PostgreSQL / pgbouncer来说,这将是非常棒的。

首先,请阅读我们有关容量规划的典型问题 。
你所要求的具体build议是容量规划build议,你将不得不自己解决,为你的特定环境。

其次,你看这个错误。
您拥有的内存(或任何其他资源)数量并不决定您设置的连接数量,您需要的连接数量决定了您必须购买的服务器有多强壮。
每个连接的资源要求在手册中都有详细的介绍,并在Wiki中讨论过。 弄清楚你的环境需要什么(或做一个有教育的猜测),并确保你要运行的硬件可以处理你将要抛出的东西。


特别是:连接限制和池大小,您应该有足够的连接来满足您的应用程序的要求 – 无论是在单个服务器上,还是通过池/保镖。

“足够”是一个相对数字:一个应用程序,使一个连接(并不断重复使用)只需要一个连接。 为每个login最终用户build立连接的应用程序需要与用户一样多的数据库连接。

Postgres和pgbouncer的默认值是合理的默认值

  • 100个数据库连接对于将Postgres投入环境的典型人员来说是很多的。
    开发人员可能不需要超过10人。其他任何人都会知道足够的数量。

  • 来自每个DB池的pgbouncer 20个连接意味着您可以获得4个池指向一个服务器,而不会压倒默认的Postgres连接限制。
    pgbouncer多个池化资源可能指向一个后端数据库,并且您总是希望在后端服务器上有一些可用的连接。

如果默认值不适合您的环境,则需要更改它们。

请记住,汇集的连接并不意味着“总是捆绑每个可用的数据库连接”。
您提到的pgbouncer的要点是重用连接。 这里的效率增益并不要求你绑定每个可用的连接,只要你不断开连接,重新连接,重新协商SSL,重新validation数据库,并重新运行连接设置查询。

注意文档的default_pool_size的定义

每个用户/数据库对允许多less个服务器连接。

因此,如果默认configuration的池大小为20,在总共100个连接中,则这意味着5个不同的用户/数据库对在达到整体限制之前每个池必须各自最大化其池大小。 相反,例如,如果您使用pgbouncer通过单个用户路由到单个数据库,则您的有效连接限制为20,而不是100,因此您必须相应地设置该用例的池大小。 因人而异。