用于修复.NET应用程序以解决SQL Server超时问题并缩短执行时间的清单

时间:2020-03-05 18:54:38  来源:igfitidea点击:

一个清单清单,用于缩短.NET代码和SQL Server之间的执行时间。
从基本到怪异的解决方案都值得赞赏。

代码:

通过avgbody更改命令和连接中的默认超时。

使用存储过程调用而不是avgbody的内联sql语句。

使用Jay Shepherd的"活动监视器"查找阻止/锁定。

SQL Server:

注意AlexCuse在存储过程中的参数嗅探。

提防Martin Clarke动态地扩展数据库。

使用Profiler来查找任何查询/存储过程,而BradO花费的时间超过100毫秒。

通过Avgbody增加事务超时。

通过avgbody将动态存储过程转换为静态过程。

通过Jay Shepherd检查服务器的繁忙程度。

解决方案

回答

首先,首先检查正在运行的实际查询。我在通过程序设置时使用SQL Server Profiler,并在可能的情况下检查所有查询是否使用正确的联接和引用键。

回答

一些快速的...

  • 检查处理器对服务器的使用情况,看它是否太忙
  • 使用"活动"监视器查找阻止/锁定正在进行的操作
  • 网络问题/性能

回答

对于响应时间长的投诉,一个怪异的"解决方案"是拥有一个更有趣的进度栏。含义,取决于用户的感觉。 Windows Vista等待图标就是一个例子。快速旋转的圆圈使人感觉事情进展得更快。 Google在Android上使用了相同的技巧(至少是我所见过的版本)。

但是,我建议我们尝试首先解决技术问题,并且仅在我们选择不了时才研究人类行为。

回答

过去,我的一些解决方案是:

  • 修复sqlcommand的默认超时设置:将myCommand设置为新SqlCommand(" [dbo]。[spSetUserPreferences]",myConnection)myCommand.CommandType = CommandType.StoredProcedure myCommand.CommandTimeout = 120
  • 增加连接超时字符串:数据源= mydatabase;初始目录=匹配;持久安全信息= True;用户ID =用户;密码=密码;连接超时= 120
  • 在sql-server 2005中增加事务超时在管理工作室中,工具>选项>设计器在以下情况下增加事务超时:即使选中/取消选中了覆盖表设计器更新的连接字符串超时值。
  • 将动态存储过程转换为静态过程
  • 使代码调用存储过程,而不是在代码中编写内联sql语句。

回答

运行Profiler来测量查询的执行时间。
检查应用程序日志记录是否有任何死锁。

回答

我也喜欢使用SQL Server Profiler。我想在工作日中在其数据库服务器上的客户端站点上设置跟踪,以花费15-30分钟的时间,并记录所有持续时间> 100毫秒的查询/存储过程。无论如何,这是我的"长期运行"查询的标准。

回答

适用于SQL Server 2000的奇怪的一种,今天可能仍然适用:

确保我们没有尝试在生产中动态扩展数据库。有一个问题是,分配额外空间所花费的时间以及正常的负载运行将导致查询超时(并且增长!)。

回答

我们正在使用存储过程吗?如果是这样,我们应该提防参数嗅探。在某些情况下,这可能会导致一些运行时间非常长的查询。一些阅读:

http://blogs.msdn.com/queryoptteam/archive/2006/03/31/565991.aspx

http://blogs.msdn.com/khen1234/archive/2005/06/02/424228.aspx