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

Cho*_*per 16 postgresql linux database database-administration database-performance

有什么规则或什么东西可以用来计算max_connections,default_pool_size和的好数字max_client_conn吗?

默认值是奇怪的。PostgreSQL 默认为 max_connections=100,而 pgbouncer 默认为 default_pool_size=20。default_pool_size 不应该总是高于 max_connections 吗?否则,意义何在?我认为 pgbouncer 是为了让我们通过降低开销(通过重用 PostgreSQL 的连接)来处理更多的连接。我糊涂了。

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

我记得有一个 MySQL 电子表格可以让你计算这些类型的参数。为 PostgreSQL/pgbouncer 提供类似的东西会很棒。

vor*_*aq7 13

首先,请阅读我们关于容量规划的规范问题
您要求的具体建议是容量规划建议,您必须针对您的特定环境自行解决。

其次,你看错了。
您拥有的内存量(或任何其他资源)并不决定您设置的连接数,您需要的连接数决定了您必须购买的服务器的强大程度。手册中非常详细地
给出了每个连接的资源要求,并在您链接到的 Wiki 上进行了讨论。弄清楚您的环境需要什么(或做出有根据的猜测)并确保您将要运行的硬件可以处理您将要投入的东西。


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

“足够”是一个相对数字:建立(并不断重用)一个连接的应用程序只需要一个连接。为每个登录的最终用户建立连接的应用程序需要与其拥有的用户一样多的数据库连接。

Postgres 和 Postgres 的默认值都pgbouncer可以作为默认值

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

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

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

请记住,连接池并不意味着“总是占用所有可用的数据库连接”。
pgbouncer正如你指出是重复使用的连接。这里的效率提升并不要求您占用所有可用的连接,只是不需要每次都断开连接、重新连接、重新协商 SSL、重新对数据库进行身份验证以及重新运行连接设置查询。

  • 我不认为在正确配置之前购买更多硬件有什么意义。*“其他任何人都会知道足以增加数字”*。那么,我从哪里可以学到足够的知识呢?我没有找到太多关于连接的材料。只是试错吗?我提到的用于 MySQL 的电子表格曾经像一个魅力一样工作。使用比它所指示的更多的连接会导致服务器内存不足。现在我有 4GB,我希望必须增加默认值。另外,20x4=80,另外20个是做什么用的? (8认同)