Npgsql - “连接池已耗尽,请提高‘最大池大小’(当前为 100)或‘超时’”

问题描述 投票:0回答:1

我们在测试环境中运行的应用程序中看到了此异常。使用 dockerized Postgres 实例本地不会出现此问题。

Npgsql.NpgsqlException (0x80004005): The connection pool has been exhausted, either raise 'Max Pool Size' (currently 100) or 'Timeout' (currently 50 seconds) in your connection string. ---> System.TimeoutException: The operation has timed out. at Npgsql.PoolingDataSource.<Get>g__RentAsync|34_0(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken) at Npgsql.NpgsqlConnection.<Open>g__OpenAsync|42_0(Boolean async, CancellationToken cancellationToken) at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
  • 两种环境对池和超时使用相同的连接字符串值。
  • 应用程序使用“较新”的方式通过
    builder.Services.AddNpgsqlDataSource
  • 注册 NpgsqlDataSource
  • 语句仅通过
    await using NpgsqlCommand command = this.dataSource.CreateCommand(..)
    执行,连接不会手动打开。
  • 数据源被注入到存储库类的构造函数中,该类被注入到继承自
    BackgroundService
  • 的类的构造函数中

我从错误中不确定这是否是基础设施问题,并且驱动程序无法在超时设置内打开连接(鉴于错误不是恒定的并且增加超时不会实现任何目标,这似乎不太可能)或者连接池是由于连接未正确处理而耗尽。考虑到我们不直接处理连接并按照文档注入数据源,这似乎也不太可能。如果属实,我希望在本地也能看到错误。

c# postgresql npgsql
1个回答
0
投票

在健康检查班发现的,没有使用的流浪

ExecuteReaderAsync()

© www.soinside.com 2019 - 2024. All rights reserved.