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

3
我之前也遇到过这个问题,基本上是由于连接没有被及时关闭导致的(保持连接打开并等待垃圾回收并不是最佳实践)。
现在我又遇到了同样的问题,但似乎找不到我留下的未关闭连接。当我看到错误时,数据库已经清除了旧连接,所以我无法看到所有锁定的连接的最后一个命令(上次我遇到这个问题时非常有帮助)。
是否有任何想法可以对我的代码或数据库进行仪器化处理,以跟踪发生的情况,以便找到我的错误代码?

请提供更多的信息。编程语言是什么?数据库类型是什么?平台是什么? - Rob
你知道,通常人们在标题中没有包含足够的信息是一个错误。这一次我认为他们走得太远了。 - Paul Tomblin
2个回答

1

你提供的错误并没有真正指向一个未关闭的连接;更有可能的是,有一个查询花费的时间比应用程序预期的要长。你可以增加等待响应的时间,并且你可以使用Sql找出哪些查询是最具有挑战性的。


0
希望你有一个数据访问层类,而不是一堆类,每个类都创建自己的连接,对吧?你用的是什么语言?如果你使用C#,那么这个问题最大的原因就是DataReaders并将这些对象返回到上层。很可能某个客户端类没有关闭它从DAL类接收到的DataReader,导致连接开放/锁定了很长时间。找出你正在返回的DataReaders,并确保你的客户端类正确地关闭/处理它们。
我还会开始考虑重新设计你的数据访问层,通过实现可处理模式和可能返回POCOs而不是Data (...Tables, ...Sets, ...Readers)对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接