如何找到未关闭的连接?超时过期。操作完成之前超时时间已过或服务器没有响应

问题描述:

我以前有过这个问题,发现基本上我有一个连接,我没有足够快地关闭(让连接打开并等待垃圾收集并不是最佳实践)。如何找到未关闭的连接?超时过期。操作完成之前超时时间已过或服务器没有响应

现在我再次得到它,但我似乎无法找到我将我的连接打开的位置。当时看到错误数据库已经清除了旧的连接,所以我看不到所有锁定连接的最后一个命令(非常有帮助,我上次有这个问题)。

任何想法如何我的仪器我的代码或数据库来跟踪发生了什么,所以我可以找到我的违规的一段代码?

+0

你能提供更多的信息吗?语言?数据库类型?平台? – 2008-12-05 18:02:27

您提供的错误并不真正指向一个打开的连接;更有可能是有一个查询需要比应用程序预计更长的时间。 您可以增加等待响应的时间,并且您可以使用Sql来查找哪些查询是最重要的。

希望你有一个数据访问层类,而不是一大堆类,每个类创建自己的连接,对吧?你在用什么语言?如果您使用C#,这个问题的最大原因是DataReaders并将这些对象返回到上层。很有可能某些客户端类没有关闭它从DAL类中收到的DataReader,从而导致连接打开/锁定,因为谁知道多长时间。跟踪您要返回的DataReader并确保您的客户端类正确关闭/处理它们。

我也开始考虑通过实现Disposable模式重新设计数据访问层,并可能返回POCO而不是Data(...表,...集,...读者)对象。