Подтвердить что ты не робот

Увеличение времени ожидания команды для команды SQL

У меня есть небольшая проблема и надеюсь, что кто-то может дать мне несколько советов. Я запускаю команду SQL, но, похоже, для этой команды требуется около 2 минут для возврата данных, так как есть много данных. Но время соединения по умолчанию - 30 секунд, как я могу увеличить его и применить к этой команде?

public static DataTable runtotals(string AssetNumberV, string AssetNumber1V)
{
    DataTable dtGetruntotals;

    try
    {
        dtGetruntotals = new DataTable("Getruntotals");

        //SqlParameter AssetNumber = new SqlParameter("@AssetNumber", SqlDbType.VarChar, 6);
        //AssetNumber.Value = AssetNumberV; 

        SqlParameter AssetNumber = new SqlParameter("@AssetNumber", SqlDbType.VarChar, 10);
        AssetNumber.Value = AssetNumberV;

        SqlParameter AssetNumber1 = new SqlParameter("@AssetNumber1", SqlDbType.VarChar, 10);
        AssetNumber1.Value = AssetNumber1V;

        SqlCommand scGetruntotals = new SqlCommand("EXEC spRunTotals @AssetNumber,@AssetNumber1 ", DataAccess.AssetConnection); 
        // scGetruntotals.Parameters.Add(AssetNumber);
        scGetruntotals.Parameters.Add(AssetNumber);
        scGetruntotals.Parameters.Add(AssetNumber1);

        SqlDataAdapter sdaGetruntotals = new SqlDataAdapter();
        sdaGetruntotals.SelectCommand = scGetruntotals;
        sdaGetruntotals.Fill(dtGetruntotals);

        return dtGetruntotals;
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error Retriving totals Details: Processed with this error:" + ex.Message);
        return null;
    }
}
4b9b3361

Ответ 1

эта команда занимает около 2 минут, чтобы вернуть данные, так как данных много

Плохой дизайн. Рассмотрите возможность использования подкачки здесь.

время соединения по умолчанию составляет 30 секунд, как мне увеличить это

Поскольку вы сталкиваетесь с тайм-аутом по вашей команде, вам нужно увеличить тайм-аут вашей команды sql. Вы можете указать это в вашей команде, как это

// Setting command timeout to 2 minutes
scGetruntotals.CommandTimeout = 120;

Ответ 2

Добавьте тайм-аут вашего SqlCommand. Пожалуйста, обратите внимание, что время занимает второе место.

// Setting command timeout to 1 second
scGetruntotals.CommandTimeout = 1;

Ответ 3

Поскольку для ответа требуется 2 минуты, вы можете увеличить таймаут до 3 минут, добавив ниже код

scGetruntotals.CommandTimeout = 180;

Примечание: значение параметра находится в секундах.

Ответ 4

Настройка CommandTimeout на 120 не рекомендуется. Попробуйте использовать разбивку на страницы, как указано выше. Установка CommandTimeout на 30 считается нормальной. Что-то большее, чем это, считается плохим подходом и обычно делает что-то не так с реализацией. Теперь мир работает на подходе MiliSeconds.

Ответ 5

Некоторые из вещей, которые я здесь пишу, перекрывают предыдущие ответы, но вот контекст, в котором я совсем недавно нашел ответ на этот вопрос. Переписывание запроса, нумерации страниц или других обсуждений не принесет пользы от ответа на вопрос при различных обстоятельствах. Хотя мое обсуждение находится в другом контексте, обсуждаемый вопрос имеет ответ, который заслуживает серьезного рассмотрения.

Когда VEEAM выполняет резервное копирование SQL Server, SQL Server не может отвечать на приложения в течение нескольких секунд. Посмотрите в журнале SQL Server, чтобы увидеть, что появляется во время этих резервных копий. Затем посмотрите на локальные службы и журнал событий Windows, чтобы увидеть, как реагируют некоторые службы.

Моя первая попытка решить этот тип проблемы до завершения более полного анализа (нет ничего плохого в попытке быстрого решения, даже если вы подозреваете, что это не сработает), состоит в изменении свойства тайм-аута соединения в строке соединения, но это не полезно Приложения .NET, по крайней мере, также имеют концепцию тайм-аутов команд. Тайм-ауты команд отражают, как долго приложение, использующее это соединение, будет ожидать, когда нет ответа на запрос. Тайм-ауты команд не настраиваются в строках соединения, но являются свойством каждого объекта SqlCommand (но не обязательно каждой команды или пакета SQL, использующих один и тот же объект SqlCommand). Запрос может вернуть много записей и может занять много времени для выполнения, но Тайм-аут команды касается только времени, которое требуется для возврата первой записи или отправки некоторой ответной информации приложению, независимо от того, наблюдается ли связь за пределами приложения. или нет. После этого команда может занять столько времени, сколько ей нужно для выполнения.

Если время ожидания команды короче, чем несколько секунд, которые VEEAM использует для резервного копирования базы данных (или, возможно, менее часто проблемного, журнала транзакций), то время ожидания команды истекает, и в приложении или службе генерируется исключение. Если приложение перехватывает ошибку, повторяет операцию или создает новое соединение, то это может остаться незамеченным для службы, и интерактивный пользователь будет испытывать кратковременное отсутствие реакции, которая, с точки зрения пользователя, не повторяется. Если приложение не перехватывает ошибку и/или использует пул соединений (концепция драйвера базы данных клиентского приложения часто описывается как функция службы SQL Server, а технически это не так), то приложение или служба будут зависать,

Чтобы изменить время ожидания команды для некоторых или всех команд, выполняемых в скомпилированном приложении, приложение должно уже предоставить свойство времени ожидания команды, настраиваемое без перекомпиляции. Если исходный код доступен, его можно изменить там.

Могут быть ситуации, когда использование транзакций для переноса нескольких операторов SQL делает длительный запрос полезным. Вещи, которые выполняются редко, или вещи, запускаемые только один раз, могут не стоить усилий по оптимизации. Другая работа и оптимизация могут диктовать, как человек проводит время. Яйца, которые стремятся к совершенству в других, могут требовать, чтобы идеальное решение всегда было реализовано, по крайней мере, другими, но реальный мир требует суждений и компромиссов.

Настройка повторных попыток для служб, которые дают сбой во время резервного копирования VEEAM, не решает проблему. Моя пользовательская служба не остановилась во время резервного копирования VEEAM, зависла и не перезапустится вообще.

Как и многие вопросы, размещенные на этих досках, ответы плохо относятся к скромному ученику и наказывают его или ее за то, что они не знают вещей, которые знает ответчик, но которые являются предпосылкой для размещения вопроса в первую очередь. Вот почему я никогда не публикую вопросы.

Тринадцать лет я занимался юридической практикой, развивая довольно хорошие навыки письма. Я путешествовал по западному полушарию в качестве сотрудника Microsoft, предоставляющего обслуживание клиентов на месте для многих клиентов Microsoft, когда отличного телефонного обслуживания при условии, что этих клиентов было недостаточно.

Несмотря на это, я не в состоянии написать приемлемый вопрос с просьбой о помощи на технической доске объявлений, если так будет даже в наши дни [я пожилой человек]). Я даже могу потратить время на написание вопроса, пытаясь отогнать мерзость, которую может привлечь даже неправильная установка запятой, и я не могу этого сделать. Пожалейте бедного человека, который задает вопрос и нуждается в быстром ответе, чтобы решить насущную проблему. Предположите, что есть альтернативные подходы к проблеме, но ответьте на вопрос, если есть ответ.

Ответ 6

Установка времени ожидания команды до 2 минут.

 scGetruntotals.CommandTimeout = 120;

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

  • удаление курсер или время и т.д.
  • используя пейджинг
  • используя #tempTable и @variableTable
  • оптимизация объединенных таблиц