Sequelize + postgres,如何计算连接池大小?

Sequelize + postgres, how to calculate Connection Pool size?

在我们的 nodejs 应用程序中,我们开始出现 SequelizeConnectionAcquireTimeoutError 错误。目前我们使用默认的 sequelize 连接设置:

{
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
}

如何选择最大池的最佳值?

我在蚂蚁网站上搜索了很多类似的问题,但找不到这个问题的具体答案。我将 sequelize 与 postgres 结合使用,这是我在 Pg wiki 上找到的唯一、最明智的信息: https://wiki.postgresql.org/wiki/Number_Of_Database_Connections

How to Find the Optimal Database Connection Pool Size”段落在哪里,答案(简而言之):

一个多年来在许多基准测试中表现良好的公式是,为了获得最佳吞吐量,活动连接数应该接近 ((core_count * 2) + effective_spindle_count).

我在堆栈溢出上发现了非常相似的主题,它可以帮助提供我的问题的上下文 - 但没有答案。 Nodejs, Optimal parameters for sequelize connection pool?

PostgreSQL Wiki 中的公式假设连接池中的会话永远不会空闲,因此限制可能太低。我提出了一个改进的公式 in my blog.

问题是,对于 v14 之前的 PostgreSQL 版本,很难估计您的事务时间有多少是花在等待客户端上的。您将不得不进行试验。

连接池的大小应该足够小,即使所有连接都在使用中,数据库也不会过载。活动连接数永远不应超过数据库计算机中的核心数。