SqlCommand объект, сколько времени для CommandTimeout? - PullRequest
21 голосов
/ 11 августа 2011

Как мне решить, какой отрезок времени использовать в качестве тайм-аута при использовании объекта SqlCommand?

В части кода, над которым я работаю (написано кем-то другим), у меня есть:

cmd.CommandTimeout = 60;

Который я думаю довольно короткий. Тем не менее, я видел некоторых людей на форумах, которые говорили о том, чтобы установить 30000, что кажется слишком длинным.

Как узнать, что лучше для моего приложения?

Ответы [ 5 ]

38 голосов
/ 11 августа 2011

Кажется, что люди не понимают, секунды это или миллисекунды.Документация гласит, что время ожидания указывается в секундах.Время ожидания в 1 минуту кажется разумным для большинства запросов.Тайм-аут 8+ часов не кажется разумным.

У вас есть вопросы, которые вы ожидаете занять больше минуты?Если это так, увеличьте его до значения, которое, как вы ожидаете, будет выше, чем то, что вы увидели бы, если бы все работало правильно, но не настолько высоко, чтобы потребовать целую вечность, чтобы предупредить вас о проблеме.(Например, вы можете перейти от 1 минуты до 5 минут.)

6 голосов
/ 11 августа 2011

Значение по умолчанию составляет 30 секунд (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx).

Если ваша база данных находится на том же компьютере, вам обычно не нужно ее менять. Просто попробуйте: если вы испытываете таймауты соединения, увеличьте значение.

5 голосов
/ 11 августа 2011

Вы должны рассчитать, сколько времени займет самый длинный запрос, и, вероятно, умножить это значение на 1,5 для обработки перегрузки сервера, сетевого трафика и т. Д. *

1 голос
/ 11 августа 2011

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

Итак, установка значения CommandTimeout полностью зависит от вашего приложения и требований, если вы знаете оператор sqlили хранимая процедура, которую вы выполняете, займет чуть больше, чем будет установлено значение больше 60, в противном случае 60 секунд будет достаточно, чтобы дождаться завершения любого оператора.

1 голос
/ 11 августа 2011

Это в секундах, и оно полностью зависит от того, сколько времени может занять фактическая команда SQL.

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

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

...