C# npgsql泄漏Postgres DB连接:监视连接的方法?

C# npgsql泄漏Postgres DB连接:监视连接的方法?,c#,postgresql,connection-pooling,pooling,npgsql,C#,Postgresql,Connection Pooling,Pooling,Npgsql,背景:我正在将我的应用程序从NPGSQLV1移动到NPGSQLV2.0.9。运行应用程序几分钟后,我得到一个System.Exception:从池中获取连接时超时 web声称这是由于连接泄漏(打开db连接,但未正确关闭) 所以 我正在尝试诊断npgsql中泄漏的postgres连接 来自各地的各种网络文献;诊断泄漏连接的一种方法是在npgsql上设置日志记录,并在日志中查找泄漏连接警告消息。问题是,我在任何地方的日志中都没有看到这条消息 我还发现了监视npgsql连接的实用程序,但它不稳定并且崩

背景:我正在将我的应用程序从NPGSQLV1移动到NPGSQLV2.0.9。运行应用程序几分钟后,我得到一个System.Exception:从池中获取连接时超时

web声称这是由于连接泄漏(打开db连接,但未正确关闭)

所以

我正在尝试诊断npgsql中泄漏的postgres连接

来自各地的各种网络文献;诊断泄漏连接的一种方法是在npgsql上设置日志记录,并在日志中查找泄漏连接警告消息。问题是,我在任何地方的日志中都没有看到这条消息

我还发现了监视npgsql连接的实用程序,但它不稳定并且崩溃

所以我只能手动检查代码。对于创建npgsql连接的每个地方,都有一个finally块来处理它。对于打开datareader的每个位置,都会使用CommandBehavior.CloseConnection(并释放datareader)


还有其他地方需要检查,或者有人能推荐一种查找泄漏池连接的方法吗?

更新:我正在以更好的方式检查这些泄漏连接的分配位置。请查看我的帖子: 我希望有帮助

编辑:您可能想尝试我们最新的测试版2.0.11.91。我们添加了一些代码来改进连接池,这可以帮助您

嗯,这很奇怪。。。。你应该收到一些信息

但这些消息仅在ms.net运行时完成对象时出现。您是否可能同时使用超过默认最大连接数?我的意思是,您的峰值使用率可能超过了最多20个连接数

我希望有帮助


请告诉我您得到了什么。

即使我将连接数增加到100,我仍然会遇到这个例外。我很肯定我们没有使用那么多的连接。你能试着禁用连接池并检查服务器中是否有浮动的连接吗?您可以通过在连接字符串中添加pooling=false来禁用池。如果在使用应用程序一段时间后,您在pg服务器中看到连接,则可能是连接泄漏。希望能有帮助。你好,弗朗西斯科,谢谢你的帮助。正如您所建议的,我使用pooling=false禁用了池。为了监视连接,我正在使用
SELECT*FROM pg_stat_activity
SQL查询。我看到的连接最多的是11个,然后又回到了1(对于sql查询),再上升到3或4个,然后再下降。另一方面,禁用池确实会降低npgsql/postgres的性能。提示:如果您在connectionstring中关闭池,那么它对我来说效果非常好。我发现很多挂起的连接都使用“UNLISTEN*”作为查询。那是怎么回事?我也有同样的问题。但我发现只有在使用DbConnection.BeginTransaction和DbTransaction.Commit/Rollback时连接才会泄漏。我正在确保正确关闭/处理所有连接,但没有帮助。我认为这是Npgsql本身的问题,而不是我们的代码。如果你找到了解决办法,一定要告诉我。谢谢