我有一些奇怪的行为,我无法弄清楚为什么会发生。 我看到间歇性的超时异常。 我很确定它与音量有关,因为它在我们的开发环境中不可重复。 作为一个bandaid解决方案,我尝试将sql命令超时提升到60秒,但正如我发现的那样,这似乎没有帮助。 这是一个奇怪的部分,当我检查我的登录过程失败时,这里是开始和结束时间:

  • 09/16/2008 16:21:49
  • 09/16/2008 16:22:19

那么当我将命令超时设置为60时,它怎么能在30秒内超时呢?

仅供参考,这是抛出的异常:

System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader()
   at SetClear.DataAccess.SqlHelper.ExecuteReader(CommandType commandType, String commandText, SqlParameter[] commandArgs)

===============>>#1 票数:3

这可能听起来很愚蠢,但只是听我说。 检查查询中涉及的所有索引和主键。 它们存在吗? 它们是否支离破碎? 我有一个问题,所以有一些原因,直接运行脚本工作只是找到,但是当我通过应用程序执行它时,它很慢,因为污垢。 读者基本上就像游标一样,因此索引非常重要。

它可能不是这个,但它始终是我检查的第一件事。

===============>>#2 票数:3 已采纳

SQL命令超时,因为您使用的查询所花费的时间比执行时要长。 在查询分析器或Management Studio中执行它, 在数据库中包含代表性的数据量 ,并查看执行计划以找出缓慢的情况。

如果某些事情花费了大部分时间并被描述为“表扫描”或“聚簇索引扫描”,请查看是否可以创建将该操作转换为键查找的索引(索引查找或聚簇索引)寻求)。

===============>>#3 票数:0

尝试更改SqlConnection的超时属性,而不是命令的属性

===============>>#4 票数:0

因为超时发生在连接上,而不是命令。 您需要设置connection.TimeOut属性

===============>>#5 票数:0

我曾经遇到过这个问题,并且在我的一个数据库视图中将其跟踪到一些非常低效的SQL代码。 有人将带有子查询的复杂条件放入表连接的ON子句中,而不是放入它所属的WHERE子句中。 一旦我纠正了这个错误,问题就消失了。

  ask by Joel Martinez translate from so

未解决问题?本站智能推荐:

1回复

过程从ADO.NET中超时,但在SSMS中没有

我有一个存储过程给我一个SqlException,因为我从代码运行它时超时(超时设置为30)。 当我直接在Management Studio中运行该过程时,它会在1秒内执行。 我也只在针对特定数据库运行时获得超时。 当我使用其他数据库时,它可以快速完成而不会出现错误。 这是完整的错误消息
9回复

在db应用程序中处理SqlExceptions的推荐方法

我在使用SQL Server编写的数据库应用程序上使用sql server作为后端。 为了数据完整性,我尝试在数据库级别上尽可能地强制执行 - 关系,检查约束,触发器。 由于它们,如果数据不一致,则save / update / insert可能会失败,并且app会抛出SqlExcept
3回复

是什么原因导致LINQ to SQL中的Timeout过期SqlExceptions?

我的应用程序一直运行到Timeout Expired SqlExceptions。 问题是这个查询只需要运行相当长的时间。 我无法弄清楚这个异常发生在哪里。 这是在数据库服务器上创建的超时还是在我的程序中发生? 或者如果两者兼而有之,我该如何确定它是哪一个? 最后,如何延长超时时间
2回复

为什么简单选择会出现超时

我有一个应用程序,它使用SqlCommand.ExecuteReader()从SQL Server 2008数据库中读取数据。 当我使用它时,我将得到一个TimeoutException 。 CommandTimeout设置为40秒 - 在异常发生之前也需要40秒。 我还将Isolatio
2回复

SQL Server,C#:事务回滚的超时异常

我有一个奇怪的问题。 我有一个.NET程序,我的进程逻辑需要一个SQL Server 2005数据库上长时间运行的事务(~20分钟)。 没关系,因为没有人并行访问数据库。 当出现问题时,应该回滚事务。 很少,没有任何可见的图案的Rollback()我在操作DbTransaction对
2回复

简单的更新命令导致SqlException执行超时过期

我有一个将mssql-db(源)转换为另一个mssql-db(目标)的应用程序。 对于我的源代码中的每个表,我基本上都获得了所有行,并为目标行的每一行插入了一个插入。 我运行一个简单的查询,该查询更新了源行以存储插入到target-db中的记录的target-table和target-id:
1回复

在定义的超时之前发生“超时过期”异常

使用ADO.NET和SQL Server 2008。 SqlCommand的CommandTimeout属性未更改,因此其默认值为30。 该应用程序运行数十个命令,并将结果(或异常)记录到SQL表中,因此我知道每次执行的开始时间。 下一条日志记录的开始时间为我提供了持续时间的估算值
1回复

传递大型表值参数时超时

我使用ADO.NET调用SQL Server存储过程,我必须传递一个非常大的Table-Valued参数。 我经常得到这个超时异常: 我正在调用ExecuteNonQueryAsync ,根据文档不受CommandTimeout的影响。 问题是:我应该增加什么超时值才能将大型TV
2回复

ADO.NET超时但在SSMS中工作正常

我正在尝试使用SQL Server 2008R2从ADO.NET运行查询。 我正在使用CTE为@Offset和@Limit提供分页和添加参数,它们都是整数。 我正在根据用户输入构建参数化查询。 最终输出是这样的: 我正在使用一些喜欢的条款,这就是为什么我有OPTION RECO
4回复

IIS中的集成Windows身份验证导致ADO.NET故障

我们有一个在IIS下运行的.NET 3.5 Web服务( 不是 WCF)。 它必须使用identity impersonate="true"和集成Windows身份验证才能对第三方软件进行身份验证。 此外,它使用ADO.NET和SQL Server身份验证(在连接字符串中指定固定的用户ID和