sql-server-2005 – 过程从ADO.NET中超时,但在SSMS中没有

前端之家收集整理的这篇文章主要介绍了sql-server-2005 – 过程从ADO.NET中超时,但在SSMS中没有前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个存储过程给我一个sqlException,因为我从代码运行它时超时(超时设置为30).当我直接在Management Studio中运行该过程时,它会在1秒内执行.我也只在针对特定数据库运行时获得超时.当我使用其他数据库时,它可以快速完成而不会出现错误.这是完整的错误消息:
System.Data.sqlClient.sqlException (0x80131904): 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.sqlInternalConnection.OnError(sqlException exception,Boolean breakConnection)
   at System.Data.sqlClient.TdsParser.ThrowExceptionAndWarning()
   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,Boolean returnStream,Boolean async)
   at System.Data.sqlClient.sqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method,DbAsyncResult result)
   at System.Data.sqlClient.sqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method)
   at System.Data.sqlClient.sqlCommand.ExecuteReader(CommandBehavior behavior,String method)
   at System.Data.sqlClient.sqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)

这个堆栈跟踪对任何人都意味着什么?看起来我的sproc可能已经完成了,并且在尝试读取某种元数据时超时了?

我尝试在运行过程中查看该进程并将其暂停. sys.dm_os_waiting_tasks将等待类型显示为IO_COMPLETION,如果有任何用途的话.我在数据库中使用sp_who2’active’看到的唯一进程是一次超时和我的活动SSMS窗口,所以我不认为这是一个阻塞问题.我验证了这个数据库与工作数据库具有相同的权限,并运行dbcc checkdb而没有任何错误.如何确定超时的原因?

解决方法

您可以将超时的会话的SET选项与不是的会话的SET选项进行比较:
SELECT
    session_id,[ansi_defaults],[ansi_null_dflt_on],[ansi_nulls],[ansi_padding],[ansi_warnings],[arithabort],[concat_null_yields_null],[deadlock_priority],[quoted_identifier],[transaction_isolation_level]
FROM
    sys.dm_exec_sessions
WHERE
    session_id IN (<spid1>,<spid2>);

当您发现一些不同的情况时,请尝试将每个设置更改为SSMS查询中的相反设置,直到获得超时(或在发送查询之前手动设置应用程序代码中的选项).现在,我没有方便的2005实例,所以没有测试过这个查询.您可能需要注释掉一个或多个列名称.

猜你在找的MsSQL相关文章