2010-12-15 3 views
7

Проблема заключается в том, что у меня есть хранимая процедура, которая выполняется последовательно на сервере Sql Server Management Server в течение 2 секунд, но при вызове той же самой хранимой процедуры из кода это время.Истекло время ожидания SQL за 2-секундный запрос

Когда он правильно запускается из SSMS, он должен возвращать около 30 строк.

Я пробовал несколько разных способов вызова процедуры из кода, но каждый раз с тем же результатом. Это только недавно началось, вчера он работал нормально.

Предпочтительный способ вызова процедуры для нас использует Linq2SQL, который дает следующее сообщение об ошибке:

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

Source Error:

Line 16:   public IMultipleResults GetTournamentRatingNonComplaintData([global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "DateTime")] System.Nullable<System.DateTime> startdate, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "DateTime")] System.Nullable<System.DateTime> enddate, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Int")] System.Nullable<int> officialSportID, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Char(1)")] System.Nullable<char> gender, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Int")] System.Nullable<int> level) 
Line 17:   { 
Line 18:    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), startdate, enddate, officialSportID, gender, level); 
Line 19:    return ((IMultipleResults)(result.ReturnValue)); 
Line 20:   } 

Кто-нибудь знает, что различия между выполнением его в SSMS и через код? Что можно сделать для устранения этой проблемы?

+0

Вы установили (или проверили) CommandTimeout в код, вызывающий SP? – 2010-12-15 16:08:36

+0

Тайм-аут команды установлен на 15 секунд, после этого времени истекает время. Хотя запрос должен выполняться всего 2 секунды. – 2010-12-15 16:29:36

ответ

6

Ваше соединение с студией SQL Management может быть настроено иначе, чем строка подключения, используемая .NET.

Например, см. Параметры, установленные по умолчанию в SQL Management Studio Tools/Options/Query Execution/SQL Server/Advanced.

Я подозреваю, что некоторые настройки, которые отличаются между двумя средами, вызывают проблемы. Для отладки вы должны попытаться настроить SQL Server Management Studio на использование той же конфигурации, что и ваша строка подключения .NET, перед запуском вашего SP.

В качестве альтернативы, добавьте инструкции SET в свой .NET-запрос, чтобы настроить все параметры, которые вы видите настроенными в Management Studio.

Не всегда легко найти настройку, отличающуюся друг от друга - по моему опыту распространенной причиной являются разные настройки ANSI.

0

Это хранимая процедура? В SSMS вы запустили хранимую процедуру или просто запрос. Я столкнулся с Paramter Sniffing в SQL, который потенциально может привести к длительной процедуре Store. Параметры поиска в Google, и вы найдете вариант, как его избежать. Назначение этого параметра локальной переменной внутри SP и использование их вместо фактических параметров

+0

Это хранимая процедура, но я также запускал ее как простой текстовый запрос с теми же результатами, что и его работа в качестве хранимой процедуры. – 2010-12-15 16:31:26

Смежные вопросы