用于修复 .NET 应用程序以解决 SQL Server 超时问题并缩短执行时间的清单
Posted
技术标签:
【中文标题】用于修复 .NET 应用程序以解决 SQL Server 超时问题并缩短执行时间的清单【英文标题】:A checklist for fixing .NET applications to SQL Server timeout problems and improve execution time 【发布时间】:2010-09-09 04:52:54 【问题描述】:用于改进 .NET 代码和 SQL Server 之间的执行时间的清单。 任何从基本到奇怪的解决方案都值得赞赏。
代码:
通过avgbody更改命令和连接中的默认超时。
使用存储过程调用而不是avgbody的内联sql语句。
使用Jay Shepherd 的活动监视器查找阻塞/锁定。
SQL 服务器:
注意AlexCuse 在存储过程中的参数嗅探。
注意通过Martin Clarke动态增长数据库。
使用 Profiler 查找任何查询/存储过程,通过 BradO 花费超过 100 毫秒。
将事务超时时间增加avgbody。
通过avgbody将动态存储过程转换为静态存储过程。
通过Jay Shepherd查看服务器的繁忙程度。
【问题讨论】:
【参考方案1】:过去我的一些解决方案是:
修复sql命令的默认超时设置:
将 myCommand 作为新的 SqlCommand("[dbo].[spSetUserPreferences]", myConnection)
myCommand.CommandType = CommandType.StoredProcedure
myCommand.CommandTimeout = 120
增加连接超时字符串:
Data Source=mydatabase;Initial Catalog=Match;Persist Security Info=True;User ID=User;Password=password;Connection Timeout=120
在 sql-server 2005 中增加事务超时
在 management studio 的工具 > 选项 > Designers 中增加“事务超时时间:”即使“覆盖表设计器更新的连接字符串超时值”已选中/未选中。
将动态存储过程转换为静态存储过程
让代码调用存储过程,而不是在代码中编写内联sql语句。
【讨论】:
【参考方案2】:对于响应时间长的抱怨,一个奇怪的“解决方案”是有一个更有趣的进度条。意思是,根据用户的感觉工作。一个示例是 Windows Vista 等待图标。那个快速旋转的圆圈给人的感觉是事情进展得更快。 Google 在 android 上使用了相同的技巧(至少是我见过的版本)。
但是,我建议先尝试解决技术问题,然后仅在别无选择的情况下处理人类行为。
【讨论】:
【参考方案3】:您是否使用存储过程?如果是这样,您应该注意参数嗅探。在某些情况下,这可能会导致一些非常长时间运行的查询。一些阅读:
http://blogs.msdn.com/queryoptteam/archive/2006/03/31/565991.aspx
http://blogs.msdn.com/khen1234/archive/2005/06/02/424228.aspx
【讨论】:
【参考方案4】:首先 - 检查正在运行的实际查询。我在通过程序进行设置时使用 SQL Server Profiler,并尽可能检查我的所有查询是否使用正确的连接和引用键。
【讨论】:
【参考方案5】:一些快速的...
检查服务器的处理器使用情况,看看它是否太忙了 使用活动监视器查找阻塞/锁定 网络问题/性能【讨论】:
【参考方案6】:运行 Profiler 以测量查询的执行时间。 检查应用程序日志记录是否存在任何死锁。
【讨论】:
【参考方案7】:适用于 SQL Server 2000 的一个奇怪的问题可能今天仍然适用:
确保您没有尝试在生产环境中动态扩展数据库。分配额外空间和正常负载运行所需的时间会导致查询超时(以及增长!)
【讨论】:
【参考方案8】:我也喜欢使用SQL Server Profiler。我喜欢在工作日中间的 15 到 30 分钟的时间内在其数据库服务器上的客户端站点上设置跟踪,并记录所有持续时间 > 100 毫秒的查询/存储过程。无论如何,这是我对“长时间运行”查询的标准。
【讨论】:
以上是关于用于修复 .NET 应用程序以解决 SQL Server 超时问题并缩短执行时间的清单的主要内容,如果未能解决你的问题,请参考以下文章
奇怪的间歇性 SQL 连接错误,重新启动时修复,3-5 天后恢复 (ASP.NET)
用于 XML 和 SQL Server 集成的 .NET 应用程序