npgsql泄漏Postgres数据库连接:监控连接的方法?

时间:2010-05-05 17:43:38

标签: c# postgresql connection-pooling pooling npgsql

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

网络声称这是由于连接泄漏(打开数据库连接,但没有正确关闭它们)。

所以

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

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

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

所以我手动检查代码。对于创建npgsql连接的每个场所,都有一个finally块处理它。对于打开datareader的每个场所,都使用CommandBehavior.CloseConnection(并且处理datareader)。

还有其他要检查的地方,或者有人可以推荐一种寻找漏水池连接的方法吗?

1 个答案:

答案 0 :(得分:7)

更新:我正在以更好的方式检查这些泄漏连接的分配位置。请查看我的帖子:http://fxjr.blogspot.com/2012/11/better-tracing-of-npgsql-connection.html 我希望它有所帮助。

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

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

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

我希望它有所帮助。

请让我知道你得到了什么。