修复.NET应用程序到SQL Server超时问题并提高执行时间的清单

12
一份用于改善.NET代码和SQL Server之间执行时间的检查清单。欢迎分享从基础到奇怪的任何解决方案。
代码:
通过avgbody,更改命令和连接中的默认超时时间。
使用存储过程调用而非内联SQL语句,由avgbody提供。
使用活动监视器寻找阻塞/锁定,由Jay Shepherd提供。
SQL Server:
注意存储过程中的参数嗅探问题,AlexCuse提供建议。
小心动态增长数据库,Martin Clarke提供建议。
使用Profiler来查找任何超过100毫秒的查询/存储过程,BradO提供建议。
增加事务超时时间,avgbody提供建议。
将动态存储过程转换为静态存储过程,avgbody提供建议。

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

8个回答

5

过去我提供的一些解决方案包括:

  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;Connection Timeout=120

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

    在管理工具的Tools > Option > Designers中,即使选中/未选中“为表设计器更新覆盖连接字符串超时值”,也可以增加“事务后超时时间:”

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

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


3
一个奇怪的“解决方案”是在长时间响应投诉时使用更有趣的进度条。这意味着要关注用户的感受。一个例子是Windows Vista等待图标。那个快速旋转的圆圈给人一种事情正在加速进行的感觉。Google在Android上也使用了同样的技巧(至少我看到的版本如此)。
然而,我建议首先尝试解决技术问题,只有当你没有选择时才考虑人类行为的问题。

2

1
首先 - 检查实际运行的查询。我使用SQL Server Profiler作为我的程序设置并检查所有查询是否使用正确的连接和参考键。

0

几个快速的建议...

  • 检查服务器处理器使用情况,看看是否太忙了
  • 在活动监视器中查找阻塞/锁定情况
  • 网络问题/性能

0

运行 Profiler 来测量查询的执行时间。
检查应用程序日志以查找任何死锁。


0

我也喜欢使用 SQL Server Profiler。 我想在客户站点上设置跟踪,记录所有查询/存储过程的持续时间> 100毫秒,在繁忙的业务时间内持续15-30分钟。这是我的标准,用来检测“长时间运行”的查询。


0

关于 SQL Server 2000 的一个奇怪问题,现在可能仍然适用:

确保你不是在生产环境中尝试动态扩展数据库。到达一定阈值时,分配额外空间所需的时间以及正常负载运行将导致查询超时(还有增长也是如此!)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接