我正在AWS RDS上使用postgres 9.5作为数据库,并使用node.js将Sequelize用作ORM。 DB上的max_connections为1660,而Sequelize上的最大连接池大小为600。即使在更高的负载下(每秒600个查询),Sequelize上的Resource Request Timeout Error也证明了这一点,AWS RDS的管理控制台显示数据库连接数为10。
我想问一下RDS控制台中的数据库连接是否与在RDS中的max_connections和Sequelize中的最大连接池大小中配置了限制的连接相同。
如果它们相同,那么为什么RDS控制台在上述负载较高的时间内没有显示更多正在使用的连接?
答案 0 :(得分:0)
我想问一下RDS控制台中的数据库连接是否与在RDS中的max_connections和Sequelize中的最大连接池大小中配置了限制的连接相同。
是的,数据库连接表示max_connections设置限制的连接类型。但是,RDS控制台的值很慢。如果连接中的尖峰只是暂时的,则它们可能根本不会出现,如果出现,则是在事实发生之后。即使我将RDS用于生产数据,我仍然会建立一个本地数据库来测试类似的事情,因为与RDS相比,实时监视和深度监视要容易得多。我对Sequelize的了解还不够多,很难说它是否与“最大连接池大小”所指的东西相同。
如果它们相同,那么为什么RDS控制台在上述负载较高的时间内没有显示更多正在使用的连接?
它们要么在那里,但是您在笨拙的控制台中看不到它们,或者Sequelize实际上并未生成它们。数据库日志文件中有条目吗?
无论如何,为什么要这样?您的数据库没有600个CPU。而且也可能没有600个独立的IO通道。您要做的就是使并发连接相互争夺资源,并由于自旋锁或LWLock的争用而使整体吞吐量降低。