首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是否可以停止调用sp_reset_connection以提高性能?

我是否可以停止调用sp_reset_connection以提高性能?
EN

Stack Overflow用户
提问于 2010-10-23 13:49:49
回答 3查看 17.4K关注 0票数 13

我的分析器跟踪显示,在每个sql批处理或过程调用之间都调用了exec sp_reset_connection。有理由,但是如果我确信没有必要的话,可以阻止它被调用来提高性能吗?

更新:我认为这可以提高性能的原因有两个:

  1. Server不需要重置连接状态。我认为这是一个相对微不足道的改善。
  2. 减少网络延迟,因为客户端不需要发送exec sp_reset_connection,等待响应,然后发送它真正想要执行的任何sql。

第二个好处是我感兴趣的地方,因为在我的架构中,客户端有时离数据库很远。如果每个sql批处理或rpc都需要双重往返,则任何网络延迟的影响都会加倍。消除这种双重调用可能会提高性能。

是的,我还可以做很多其他的事情来提高性能,比如重新架构应用程序,而且我非常喜欢解决问题的根源,但在这种情况下,我只想知道是否有可能阻止sp_reset_connection被调用。然后,我可以测试是否有任何性能改进,并适当地评估不调用它的风险。

这就引出了另一个问题:与sp_reset_connection的网络通信是否真的像我前面描述的那样发生?也就是说,客户端是否发送exec sp_reset_connection,等待响应,然后发送真正的sql?还是这一切都一刀切?

EN

回答 3

Stack Overflow用户

发布于 2012-03-08 19:37:04

这个Q/A可能会有帮助:“连接”是指Server事件探查器中的吗?

然而,我使用实体框架和MS-SQL2008R2进行了快速测试。它表明,"exec sp_reset_connection“在第一次调用之后并不费时:

代码语言:javascript
复制
for (int i = 0; i < n; i++)
{
    using (ObjectContext context = new myEF())
    {
                
        DateTime timeStartOpenConnection = DateTime.Now;
        context.Connection.Open();
        Console.WriteLine();
        Console.WriteLine("Opening connection time waste: {0} ticks.", (DateTime.Now - timeStartOpenConnection).Ticks);

        ObjectSet<myEntity> query = context.CreateObjectSet<myEntity>();
        DateTime timeStart = DateTime.Now;
        myEntity e = query.OrderByDescending(x => x.EventDate).Skip(i).Take(1).SingleOrDefault<myEntity>();
        Console.Write("{0}. Created By {1} on {2}... ", e.ID, e.CreatedBy, e.EventDate);
        Console.WriteLine("({0} ticks).", (DateTime.Now - timeStart).Ticks);

        DateTime timeStartCloseConnection = DateTime.Now;
        context.Connection.Close();
        context.Connection.Dispose();
        Console.WriteLine("Closing connection time waste: {0} ticks.", (DateTime.Now - timeStartCloseConnection).Ticks);
        Console.WriteLine();
    }
}

产出如下:

打开连接时间浪费:5390101滴答。585.由sa于2011年12月20日2:18:23下午.(2560183条蜱)关闭连接时间浪费:0滴答。 打开连接时间浪费:0滴答。584.由sa于2011年12月20日2:18:20下午.(1730173条蜱)关闭连接时间浪费:0滴答。 打开连接时间浪费:0滴答。583.由sa于2011年12月20日2:18:17下午.(710071条蜱)关闭连接时间浪费:0滴答。 打开连接时间浪费:0滴答。582.由sa于2011年12月20日2:18:14下午.(720072条蜱)关闭连接时间浪费:0滴答。 打开连接时间浪费:0滴答。581。由sa于2011年12月20日2:18:09下午.(740074条蜱)关闭连接时间浪费:0滴答。

所以,最后的结论是:不要担心"exec sp_reset_connection"!它不会浪费任何东西。

票数 3
EN

Stack Overflow用户

发布于 2010-10-30 13:12:14

就我个人而言,我会留着它。

考虑到它所做的事情,我希望确保在作用域或事务中没有临时表仍然处于打开状态。

公平地说,如果不对生产数据库运行分析器,您将获得更大的性能提升。您有什么数字,文章或建议,您可以从中受益吗?

票数 2
EN

Stack Overflow用户

发布于 2010-10-23 13:52:47

只需保持连接处于打开状态,而不是将其返回到池中,并在该连接上执行所有命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4004279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档