3

我以前遇到过这个问题,发现基本上我的连接关闭得不够快(让连接保持打开状态并等待垃圾收集并不是最佳实践)。

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

知道如何检测我的代码或数据库来跟踪正在发生的事情,以便找到我的违规代码吗?

4

2 回答 2

1

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

于 2008-12-05T18:18:55.930 回答
0

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

我还开始考虑通过实现 Disposable 模式并可能返回 POCO 而不是 Data (...Tables, ...Sets, ...Readers) 对象来重新设计您的数据访问层。

于 2008-12-05T18:24:19.133 回答