Время ожидания SQL истекло при быстром запросе - PullRequest
1 голос
/ 16 марта 2011

Я делаю тяжелую работу в базе данных SQL, из C #.

Я получаю следующее исключение тайм-аута:

 System.Data.SqlClient.SqlException:

Истекло время ожидания. Период ожидания истекший до завершения операция или сервер не отвечать на запросы. Заявление было прекращено.

Я выполняю большое количество запросов (более 100 тыс.), И это не какой-то конкретный запрос, вызывающий исключение - иногда мне удается завершить их все без исключения.

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

Когда я выполняю тот же запрос непосредственно в SQL Server Management Studio, они запускаются менее чем за секунду.

Я использую объект Samme SQLConnection для всех запросов, но новый объект SQLCommand для каждого.

Когда я пытаюсь использовать профилировщик SQL Server, он просто говорит, что пакет / RPC завершен.

Почему я получаю это исключение наугад?

Ответы [ 4 ]

3 голосов
/ 16 марта 2011

Вы можете попытаться увеличить интервал ожидания в строке подключения и проверить один раз.

Другая причина может заключаться в том, что в БД есть некоторые блокировки , которые блокируют выполнение вашего запроса.Проверьте, используя sp_lock, sp_who, sp_who2, чтобы увидеть, есть ли какие-либо блокировки в таблице.

2 голосов
/ 16 марта 2011

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

0 голосов
/ 16 марта 2011

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

0 голосов
/ 16 марта 2011

Я бы согласился с другим советом проверить блокировку / блокировки и посмотреть, что происходит во время использования.Я также обязательно проверил бы работоспособность на сервере - проверил логи SQL и NT, удостоверился, что у SQL достаточно памяти, и проверил статистику ожидания, чтобы попытаться минимизировать их.

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