Код сохраняет время ожидания - PullRequest
2 голосов
/ 27 декабря 2010

Итак, у нас есть этот набор кода, который по какой-то причине задерживает время ожидания.Это не хранимая процедура, которая выполняется, потому что она работает нормально.Также, если мы удалим параметр из кода c #, код будет запущен.Параметр не работает (что приводит к истечению времени ожидания), и мы не можем понять, почему.

c #:

public static PTWViewList GetList(int studynumber) 
        {
            PTWViewList tempList = new PTWViewList();
            using (SqlConnection myConnection = new SqlConnection(AppConfiguration.cnARDB))
            {
                string spName = "ardb.PTWViewSelect";
                SqlCommand myCommand = new SqlCommand(spName, myConnection);
                myCommand.CommandType = CommandType.StoredProcedure;
                myCommand.Parameters.AddWithValue("@study", studynumber); 

                myConnection.Open();
                using (NullableDataReader myReader = new NullableDataReader(myCommand.ExecuteReader())) /*this is where the code times out*/
                {
                    tempList = new PTWViewList();
                    while (myReader.Read())
                    {
                        tempList.Add(FillDataRecord(myReader));
                    }
                    myReader.Close();
                }
            }

            tempList.ListCount = tempList.Count;
            return tempList;
        }

хранимая процедура:

CREATE PROCEDURE [ardb].[PTWViewSelect] 
    @studynumber int = NULL,
    @quoteid uniqueidentifier = NULL,
    @lineitemid uniqueidentifier = NULL
AS
BEGIN
    SET NOCOUNT ON;

    SELECT
        [Study]
        ,[LineItemID]
        ,[QuoteID]
        ,[Total]
        ,[COOP]
        ,[VendorCost]
        ,[CustCost]
        ,[LineItemNumber]
        ,[StudyTypeCode]
        ,[GroupLeader]
        ,[PTWDate]
        ,[PONumber]
        ,[POStatus]
        ,[StudyDirector]
        ,[SL_DESC_L]
        ,[SL_Code]
        ,ProjectDescription
        ,CreatedBy
        ,chARProcess
        ,CODate
    FROM
        [ARDB].[dbo].[PTWView]
    WHERE
        (@studynumber is null or StudyNumber=@studynumber)
        AND (@quoteid is null or QuoteID=@quoteid)
        AND (@lineitemid is null or LineItemID = @lineitemid)
END

Ответы [ 4 ]

2 голосов
/ 27 декабря 2010

вы пробовали

myCommand.Parameters.AddWithValue("@studynumber", studynumber);

вместо:

myCommand.Parameters.AddWithValue("@study", studynumber); 
0 голосов
/ 27 декабря 2010

При отключении arithabort программа sp заняла 45 секунд, в отличие от 1. Установка ее обратно вернула обратно в 1. Я обновил хранимую процедуру, чтобы включить ее, без изменений в приложении.Поменял его на выкл, без изменений.Затем я удалил обновление, а затем приложение работало нормально.

Я считаю, что произошло то, что обновление хранимой процедуры привело к ее перекомпиляции и устранению проблемы.Я не уверен на 100% в этом.

0 голосов
/ 27 декабря 2010

Одной вещью может быть настройка ARITHABORT, установите для нее значение ON ... NET по умолчанию имеет значение OFF

запустите процесс в SSMS с ARITHABORT, установленным в OFF, и посмотрите, работает ли он медленнее, как в .NET

Пример

MyConnection.Execute "SET ARITHABORT ON"

Другое дело, что ваше предложение WHERE не является оптимальным, посмотрите на Используете ли вы Column = @ Param ИЛИ @Param IS NULL в предложении WHERE? Не, это не выполняет

Процесс работает медленно с параметрами в SSMS? Можете ли вы показать план выполнения?

0 голосов
/ 27 декабря 2010

EDIT Если передача параметров является проблемой, то все сводится к тому, сколько времени требуется хранимой процедуре для выполнения. Время ожидания по умолчанию для сервера SQL обычно составляет 120 секунд. Вы можете добавить «Время ожидания подключения», чтобы увеличить время ожидания в строке подключения к БД и проверить.

** Старый ответ - игнорировать ** Без отслеживания стека и принятия вашего слова о том, что хранимая процедура в порядке, я предполагаю, что она истекает из-за ошибки соединения Код не может подключиться к вашему серверу БД и, следовательно, истекло время ожидания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...