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

用于缩短.NET代码和SQL Server之间执行时间的核对表。 任何从基本到奇怪的解决方案的东西都值得赞赏。

码:

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

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

使用Jay Shepherd的 Activity监视器查找阻塞/锁定。

SQL Server:

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

谨防Martin Clarke动态增长数据库。

使用Profiler查找BradO需要更长时间100毫秒的任何查询/存储过程。

avgbody增加事务超时。

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

查看Jay Shepherd对服务器的忙碌程度。

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

  1. 修复sqlcommand的默认超时设置:

    Dim myCommand As New SqlCommand(“[dbo]。[spSetUserPreferences]”,myConnection)

    myCommand.CommandType = CommandType.StoredProcedure

    myCommand.CommandTimeout = 120

  2. 增加连接超时字符串:

    Data Source = mydatabase; Initial Catalog = Match; Persist Security Info = True; User ID = User; Password = password; 连接超时= 120

  3. 在sql-server 2005中增加事务超时

    在管理工作室的工具>选项>设计器中增加“事后超时:”,即使“覆盖表设计器更新的连接字符串超时值”已选中/未选中。

  4. 将动态存储过程转换为静态过程

  5. 使代码调用存储过程,而不是在代码中编写内联sql语句。

针对长响应时间的投诉的一个奇怪的“解决方案”是有一个更有趣的进度条。 意思是,努力用户的感受。 一个例子是Windows Vista等待图标。 快速旋转的圆圈让人感觉事情变得更快。 谷歌在Android上使用相同的技巧(至少我见过的版本)。

但是,我建议首先尝试解决技术问题,并且只有在你没有选择时才开始研究人类行为。

你在使用存储过程吗? 如果是这样,你应该注意参数嗅探。 在某些情况下,这可以使一些非常长时间运行的查询。 一些阅读:

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

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

首先 – 检查正在运行的实际查询。 我使用SQL Server Profiler,因为我通过我的程序设置并检查我的所有查询是否正在使用正确的连接和引用密钥。

一些快速的……

  • 检查处理器使用服务器以查看它是否太忙
  • 使用Activity监视器查找阻塞/锁定
  • 网络问题/性能

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

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

确保您没有尝试在生产中动态增长数据库。 有一点,分配额外空间和正常负载运行所需的时间将导致查询超时(以及增长!)

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