0

我之前曾问过一个关于在 sql server 机器上执行太慢的存储过程的问题,但是,如果我在查询分析器中运行存储过程,它会在一秒钟内返回客户端是一个 .NET 1.1 winforms 应用程序。

我能够将 VNC 输入到用户的盒子中,当然,他们没有安装 SQL 工具,所以我启动了 Excel,进入 VBA 并编写了一个快速函数来调用具有完全相同参数的存储过程。

事实证明,存储过程确实返回亚秒级,我可以立即遍历所有行。但是,关闭连接需要很长时间,从 5 秒到 30 秒不等。

为什么关闭连接需要这么长时间?

4

3 回答 3

1

连接池?

那,或者我会检查客户端库的任何服务包或知识库文章。

于 2009-04-10T14:52:50.733 回答
1

您描述的症状几乎总是由于“不正确”的缓存查询计划。虽然这是一个很大的话题(参见SO 上的参数嗅探),但您通常(但不总是)可以通过重建数据库的索引并确保所有统计信息都是最新的来缓解问题。

于 2009-04-10T01:47:42.963 回答
1

如果您使用的是 SqlDataReader,您可以尝试的一件事是,一旦您拥有所需的所有数据,请先在 SqlCommand 上调用 Cancel,然后再在 SqkDataReader 上调用 Close。这将防止填写输出参数和返回值,这可能是关闭连接缓慢的原因。在 try catch 块中执行此操作,因为它可能会引发用户取消的异常。

于 2009-04-10T02:18:54.777 回答