我有一个Azure耐用功能,可与也托管在Azure中的PostgreSQL数据库进行交互。
PostgreSQL数据库的连接限制为50,此外,我的连接字符串将连接池的大小限制为40,从而为超级用户/管理员连接留出了空间。
尽管如此,在某些负载下我还是得到了错误
53300:剩余的连接插槽保留用于非复制超级用户连接
Microsoft的这份文档似乎很相关,但是似乎我不能制作一个静态客户端,并且正如我提到的那样,
因为您仍然可以用尽连接,所以应该优化与数据库的连接。
我有这种方法
private IDbConnection GetConnection()
{
return new NpgsqlConnection(Environment.GetEnvironmentVariable("PostgresConnectionString"));
}
当我想与PostgreSQL交互时,我喜欢这样
using (var cOnnection= GetConnection())
{
connection.Open();
return await connection.QuerySingleAsync(settings.Query().Insert, settings);
}
因此,我正在创建(和布置)许多NpgsqlConnection
对象,但是根据此,这应该没问题,因为连接池是在后台处理的。但是有关Azure Functions的某些信息可能会使这种想法无效。
我注意到我最终有很多空闲连接(来自pgAdmin):
Connection Idle Lifetime
,,Timeout
和)Pooling
,但连接过多的问题似乎一直持续到某种程度。另外,我尝试限制并发编排器和活动函数的数量(请参阅本文档),但这似乎在一定程度上破坏了Azure函数具有可伸缩性的目的。它确实有帮助-我得到的太多连接错误更少了。据推测,如果我继续用较小的数字进行测试,我什至可以消除它,但是,再次看来,这很不合理,并且可能还有另一种解决方案。
如何在不增加连接数的情况下将PostgreSQL与Azure函数一起使用?