SqlException: Истекло время ожидания - PullRequest
1 голос
/ 27 октября 2010

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

Я получаю следующую ошибку, и в результате происходит сбой процесса.

Истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает.

Ответы [ 4 ]

1 голос
/ 27 октября 2010

Есть много причин, по которым вы можете получить тайм-аут.Если вы получаете исключение для соединения, то каково время ожидания в SqlConnection?Если нет, то каков тайм-аут команды в SqlCommand?

Правильно ли структурирован ваш запрос?Сколько строк вы ожидаете вернуть ваш запрос?Сколько строк в двух таблицах?

0 голосов
/ 27 октября 2010

звучит как блокировка стола ... Вы должны использовать транзакцию с опцией ReadUncommited что-то вроде:

var islolation=new TransactionOptions();
isolation=IsolationLevel.ReadUncommitted;
using(var scope=new TransactionScope(TransactionScopeOption.requiresnew,isolation))
{
//code here
scope.complete();
}

также было бы неплохо проверить, закрываете ли вы соединение сразу после выполнения запроса.

0 голосов
/ 27 октября 2010

Если ваши запросы только читают, а не обновляют или вставляют, вы можете использовать NOLOCKS.

ВЫБРАТЬ * ИЗ MyTable с NOLOCK

Это должно остановить любую блокировку.

0 голосов
/ 27 октября 2010

Звучит так, будто у вас есть замок на столе.Посмотрите на механизмы блокировки.Если вы блокируете всю таблицу, это неэффективно, вместо этого вы можете заблокировать подмножество таблицы, т.е. - строку.

Также в строке подключения вы можете уменьшить время ожидания.Измените его на 2 секунды (время установления соединения, а не запроса данных).Если вы получите эту ошибку, вы сможете работать оттуда.

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