【发布时间】:2011-07-06 15:33:08
【问题描述】:
我使用 .NET 编写的代码存在问题。
问题是我在某个地方有一些不可靠的数据库代码,这意味着一段时间后我会收到以下错误:
超时。超时时间 在获得一个之前经过 来自池的连接。这可能 已经发生,因为所有汇集 连接正在使用和最大池 已达到大小。
我知道这是因为我没有在某个地方处理我的数据读取器或类似的东西,这意味着它仍然打开连接,因此它没有被返回到池中。不过,我在查找代码中发生这种情况的位置时遇到了一些问题。
所以我的问题:
有什么方法可以查询连接池以了解其正在使用的连接在做什么。我只是在寻找一种方法来查找正在运行的查询,以便我找到有问题的代码。
无论如何,我无权在相关数据库上运行活动监视器来找出这种方法。
【问题讨论】:
-
您使用的是哪个版本的框架?
-
连接池是共享资源。遗憾的是,无法知道谁在使用该资源进行故障排除。 Connection.Open 应该是我们可以轻松拦截的东西,并在连接从池中取出和返回时跟踪它们,但到目前为止,我很难找到方法。也许 SignalFx 挂钩到 CLR(它会替换方法来跟踪查询)可以帮助解决这个问题。
标签: c# .net debugging ado.net connection-pooling