C# 用于解决.NET应用程序SQL Server超时问题和改进执行时间的检查表
用于改进.NET代码和SQL Server之间执行时间的检查表。 无论是基本的还是奇怪的解决方案,我们都很欣赏 代码: 通过更改命令和连接中的默认超时 使用存储过程调用而不是内联sql语句 通过使用活动监视器查找阻塞/锁定 SQL Server: 注意存储过程中的参数嗅探 当心数据库的动态增长 使用探查器查找任何超过100毫秒的查询/存储过程 将事务超时时间增加 通过将动态存储过程转换为静态存储过程C# 用于解决.NET应用程序SQL Server超时问题和改进执行时间的检查表,c#,.net,sql-server,vb.net,timeout,C#,.net,Sql Server,Vb.net,Timeout,用于改进.NET代码和SQL Server之间执行时间的检查表。 无论是基本的还是奇怪的解决方案,我们都很欣赏 代码: 通过更改命令和连接中的默认超时 使用存储过程调用而不是内联sql语句 通过使用活动监视器查找阻塞/锁定 SQL Server: 注意存储过程中的参数嗅探 当心数据库的动态增长 使用探查器查找任何超过100毫秒的查询/存储过程 将事务超时时间增加 通过将动态存储过程转换为静态存储过程 首先检查服务器的繁忙程度。检查正在运行的实际查询。我在设置程序时使用SQL Server Pro
首先检查服务器的繁忙程度。检查正在运行的实际查询。我在设置程序时使用SQL Server Profiler,并在可能的情况下检查所有查询是否使用了正确的联接和引用键。一些快速查询
- 检查服务器的处理器使用情况,看它是否太忙
- 查看活动监视器是否正在进行阻塞/锁定
- 网络问题/性能
- 修复sqlcommand的默认超时设置: 将myCommand设置为新的SqlCommand(“[dbo].[spSetUserPreferences]”,myConnection) myCommand.CommandType=CommandType.StoredProcess myCommand.CommandTimeout=120
- 增加连接超时字符串: 数据源=我的数据库;初始目录=匹配;持久安全信息=True;用户ID=用户;密码=密码连接超时=120
- 增加sql server 2005中的事务超时 在ManagementStudio的工具>选项>设计器中,即使选中/未选中“覆盖表设计器更新的连接字符串超时值”,也会增加“之后事务超时:”的值
- 将动态存储过程转换为静态存储过程
- 使代码调用存储过程,而不是在代码中编写内联sql语句
- 对于长响应时间的投诉,一个奇怪的“解决方案”是有一个更有趣的进度条。意思是,根据用户的感受来工作。Windows Vista等待图标就是一个例子。这个快速旋转的圆圈让人感觉事情进展得更快。谷歌在Android上使用了同样的技巧(至少是我见过的版本)
但是,我建议先解决技术问题,只有在你没有选择的时候才研究人类行为。过去我的一些解决方案是:
运行探查器测量查询的执行时间。
检查应用程序日志是否存在死锁。我也喜欢使用。我喜欢在他们的数据库服务器上的客户端站点上设置一个跟踪,在一个工作日的中间有15-30分钟的时间段,并记录所有查询/存储的过程,持续时间>100毫秒。不管怎样,这就是我对“长时间运行”查询的标准。适用于SQL Server 2000的一个奇怪的标准,今天可能仍然适用:
确保您没有尝试在生产环境中动态增长数据库。分配额外空间和正常负载运行所需的时间会导致查询超时(增长也会如此!)是否使用存储过程?如果是这样,您应该注意参数嗅探。在某些情况下,这可能导致一些运行时间很长的查询。一些阅读: