2014-06-12 3 views
3

Я столкнулся с исключением во время выполнения моего запроса sql. Таким образом, я увеличил тайм-аут в своем коде на C# и теперь отлично работает.Отрицательное влияние установки тайм-аута команды sql-запроса на максимальный

DbCommand.CommandTimeout = 3600; 

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

  1. Так ли это хорошая практика добавления строки тайм-аута команды во всех моих методах?

  2. Было бы здорово знать положительную и отрицательную стороны этой операции.

+1

Это зависит от того, что вы делаете на самом деле, но, как правило мое первое действие не было бы увеличить время ожидания, но чтобы посмотреть, почему запрос занимает больше времени, и что можно сделать для повышения производительности. Только после того, как вы удовлетворены тем, что ваш запрос будет полностью оптимизирован для работы как можно быстрее, подумайте над расширением тайм-аута. С истечением 2 часов я действительно надеюсь, что вы вызываете запрос асинхронно? – GarethD

+0

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

ответ

0

также установить время в SQL Database Side

Просто вы добавить следующий код в вашей хранимой процедуры или запроса

 EXEC SP_CONFIGURE 'remote query timeout', 1800 
     reconfigure 
     EXEC sp_configure 
+2

Это не меняет того факта, что ADO.NET также указывает тайм-аут и имеет встроенный по умолчанию - 15 секунд, IIRC. Таким образом, это вряд ли сильно повлияет на соединения ADO.NET. –

4
  1. Имея разумное ожидание того, как быстро вы ожидаете что-то для запуска - это всегда хорошая идея, но, откровенно говоря, очень редко нужно указывать явный тайм-аут - обычно это делается только тогда, когда вы знаете что-то займет много времени, и вы по-прежнему не можете исправить это в db по каким-либо причинам. Это исключение, а не норма. Если у вас есть код утилиты, который обертывает ваш доступ к данным, возможно, вы можете обеспечить централизованный тайм-аут по умолчанию

  2. Единственный положительный аспект установки длительного таймаута - это использование полосы: чтобы заставить его работать. Тем не менее, это автоматический запах кода - вы действительно должны смотреть на , почему занимает так много времени и немного перепроектирует его. Есть существенные реальные проблемы, которые могут быть подняты, в том числе длительный заблокирован операций (возможно, даже неопределяемый тупик), который будет never finish; другой более непосредственный негативный аспект заключается в том, что она отвлекает вас от фиксации реальной проблемы

+0

Спасибо за отличный ответ (+1). Но у меня есть запросы, которые касаются действительно огромных данных. Вы считаете, что исправление запроса является единственным решением? Я согласен, что запрос можно оптимизировать (параллельно это делать). Но все же, когда данные растут больше, так это время исполнения? –

+0

@ Ebenezar хорошо, сначала я бы посмотрел практически на любую другую альтернативу; p –

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