У меня есть хранимая процедура, которая дает мне 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, 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.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 без ошибок.Как я могу определить причину тайм-аута?