我有一个.NET 4.0 Winform和.NET 4.0 Windows服务,它们都通过LINQ to SQL连接到SQL 2005/2008数据库。它在我们的测试环境中运行良好且快速,拥有完美的生产数据克隆,但在生产环境中,它的运行速度非常缓慢,CPU使用率和带宽使用率都很低。我还注意到每天有数百个SQL超时,即使是索引良好的数据库上的最小查询也是如此。因此,我启动了Profiler ...Linq-to-SQL和sp_reset_connection
我发现sp_reset_connection在10分钟的负载下捕获期间占SQL CPU总持续时间的三分之一和所有SQL调用总数的90%。
- 我试过禁用&启用连接池和摆弄连接字符串中允许的连接数和连接超时数。没有任何影响。
- 我一直在用ADO.NET查询代替我的LINQ查询。这些旧的ADO.NET查询从不超时。只有LINQ的。
- 我已经注意到该服务器上的其他主要性能问题,但我不确定如何通过客户的系统管理员来处理该主题。
我在运行服务的应用程序服务器上具有Admin访问权限。我在他们运行Winform的终端服务器上,以及SQL服务器上都没有访问权限。
是什么原因导致sp_reset_connection运行频繁?
- 有没有办法绕过这些调用而不会将我的应用程序中的所有LINQ都撕掉?
- 有没有办法减少这个存储过程的调用次数?
- 有没有办法减少SQL服务器在这些调用中需要的处理器时间?
- 如果我将pooling禁用并用空的替换那个存储的proc,我会乱七八糟吗?
除非你手动打开连接(这是我从来没有真正做过的,因为它是违反直觉的),或者有一个环境事务(这是一个环境事务),它会出现数据上下文在'using'块中的每个命令之后发出'sp_reset_connection'我一直都有,所以它对我有效,我甚至没有意识到为什么)。你能给一个“其他网页”的链接?想要一些有关该行为的文档。 – GSerg