首页 > 解决方案 > RDS 管理控制台中显示的 sequelize 和连接中最大连接池大小的差异

问题描述

我在 AWS RDS 上使用 postgres 9.5 作为数据库,并将 Sequelize 作为带有 node.js 的 ORM。数据库中的 max_connections 为 1660,而 Sequelize 的最大连接池大小为 600。即使在更高的负载(每秒约 600 次查询)下,Sequelize 的资源请求超时错误也证明了这一点,AWS RDS 的管理控制台显示数据库连接数为 10。

我想问一下,RDS 控制台中的数据库连接是否与 RDS 中的 max_connections 和 Sequelize 中的最大连接池大小中配置了限制的连接的含义相同。

如果它们相同,那么为什么 RDS 控制台在上述负载较高的时间内没有显示更多的连接被使用?

标签: node.jspostgresqlsequelize.jsamazon-rds

解决方案


我想问一下,RDS 控制台中的数据库连接是否与 RDS 中的 max_connections 和 Sequelize 中的最大连接池大小中配置了限制的连接的含义相同。

是的,数据库连接意味着 max_connections 设置限制的相同类型的连接。但是,RDS 控制台值滞后。如果连接高峰只是暂时的,它们可能根本不会出现,如果它们出现,那将是事后的事。即使我将 RDS 用于我的生产数据,我仍然会设置一个本地数据库来测试这样的事情,因为它比 RDS 提供的更容易实时和更深入地监控。我不太了解 Sequelize 是否与“最大连接池大小”所指的内容相同。

如果它们相同,那么为什么 RDS 控制台在上述负载较高的时间内没有显示更多的连接被使用?

要么它们在那里,但您在滞后的控制台中看不到它们,要么 Sequelize 实际上并没有生成它们。数据库日志文件中有条目吗?

无论如何,你为什么要这个?您的数据库没有 600 个 CPU。而且可能也没有 600 个独立的 IO 通道。您要做的就是促使您的并发连接相互争夺资源,并由于自旋锁或 LWLocks 的争用而降低您的整体吞吐量。


推荐阅读