Linq-to-SQL和sp_reset_connection

tsi*_*ilb 5 c# sql connection-pooling query-optimization linq-to-sql

我有一个.NET 4.0 Winform和一个.NET 4.0 Windows服务,它们都通过LINQ to SQL连接到SQL 2005/2008数据库.它在我们的测试环境中运行良好且快速,完美克隆生产数据,但在生产环境中,它运行速度非常慢,CPU使用率和带宽使用率也很低.我还注意到每天有数百个SQL超时,即使对于索引良好的数据库上的最小查询也是如此.所以我解雇了Profiler ......

我发现sp_reset_connection在加载10分钟的捕获期间占SQL SQL总持续时间的三分之一和所有SQL调用总数的90%.

  • 我已经尝试禁用和启用连接池并摆弄连接字符串中允许的连接数和连接超时数.没有任何影响.
  • 当我遇到它时,我一直用ADO.NET查询替换我的LINQ查询.这些旧的ADO.NET查询永远不会超时.只有LINQ的.
  • 我注意到该服务器上的其他主要性能问题,但我不确定如何使用客户的sysadmin来处理该主题.
  • 我在运行该服务的应用程序服务器上具有Admin访问权限.我接下来在他们运行Winform的终端服务器上没有访问权限,也没有访问SQL服务器.

  • 什么原因导致sp_reset_connection经常运行?

  • 有没有办法绕过这些调用而不会撕掉我的应用程序中的所有LINQ?
  • 有没有办法减少对此存储过程的调用次数?
  • 有没有办法减少SQL服务器对这些调用所需的处理器时间?
  • 如果我把游泳池禁用并用一个空的替换那个存储过程,我会把其他东西搞乱吗?

Ple*_*eun 4

找到了一些关于此的其他页面,其中一个建议是这样的:

对于重置连接,请在使用之前打开 DataContext 连接并在最后关闭它。

db.Connection.Open()
... work...
db.Connection.Close()
Run Code Online (Sandbox Code Playgroud)

  • 在“using”块中的每个命令之后,都会出现数据上下文问题“sp_reset_connection”,除非您手动打开连接(这是我实际上从未做过的事情,因为它违反直觉)或有一个环境事务(我总是有,所以它对我有用,但我什至不知道为什么)。您能提供“其他一些页面”的链接吗?想要一些有关该行为的文档。 (2认同)