存储过程的性能问题 - 关闭连接太慢

时间:2009-04-09 22:36:16

标签: performance sql-server-2005 connection

我之前已经问过question关于在sql server框上执行得太慢的存储过程,但是,如果我在查询分析器中运行了sproc,它将在一秒钟内返回。客户端是.NET 1.1 winforms应用程序。

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

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

为什么关闭连接要花那么长时间?

3 个答案:

答案 0 :(得分:1)

您描述的症状几乎总是由于“不正确”的缓存查询计划。虽然这是一个很大的主题(请参阅此处的parameter sniffing),但您可以(通常并非总是)通过重建数据库的索引来缓解问题,从而确保所有统计信息都是最新的。

答案 1 :(得分:1)

如果您正在使用SqlDataReader,那么您可以尝试的一件事就是获得所需的所有数据后,在SqkDataReader上调用Close之前调用SqlCommand上的Cancel。这将防止填充out参数和返回值,这可能是导致连接缓慢的原因。在try catch块中执行它,因为它可以抛出用户异常取消。

答案 2 :(得分:1)

连接池?

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