хранимая процедура для многопоточного приложения - истекло время ожидания. Время ожидания истекло до - PullRequest
1 голос
/ 05 июля 2011

У меня есть приложение, использующее taskfactory, которое создает несколько задач, которые вставляют записи в одну таблицу в базе данных.У меня есть задания, которые очищают таблицу, когда она становится слишком большой, и время ожидания выполнения равно 0 в параметрах в SQL Server Management Studio.Я продолжаю получать следующую ошибку в задачах при попытке выполнить вставку с использованием хранимой процедуры и перевести процесс обработки исключений в спящий режим и повторить попытку.Это не помогает, поскольку кажется, что время ожидания почти при каждой попытке.Не уверен, как справиться с этим и убедиться, что стол обрабатывает все эти вставки.Попытался включить время ожидания соединения = 600 в одну из цепочек соединений процессов, но это не помогло.

Также установите значение sqlquerytimeout в реестре равным 90, но все равно не помогает.

Оцените ответы.

ОШИБКА: истекло время ожидания, истекло время ожидания до завершения операции, или сервер не отвечает ...

не удалось увидеть подробности ошибки, поскольку необходимо было установить параметры отладки Visual Studio 2010, чтобыКстати, но я установлю ответный поток и перехватываю

, но я перезагрузил сервер sql, и теперь все как-то нормально ... не знаю почему.

Ошибки повторяются.

   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
     Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception,  
     Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, 
     SqlCommand cmdHandler, SqlDataReader dataStream, 
      BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
  at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior 
     runBehavior, String resetOptionsString)
  at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior 
     cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
  at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior 
   cmdBehavior, RunBehavior runBehavior, Boolean returnStream, 
     String method, DbAsyncResult result)  
  at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, 
     String methodName, Boolean sendToPipe)
  at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
 at GNIPProcess.Feeds_DB.insert_tfeed(String data, String searchTerm, 
  String entryId, String entryContent, String pubDate, String authorId, String activity, String& ExecutionError, SqlConnection& connectionObj, SqlCommand& 
 CommandObj) in Y:\Data\WebApp\Process\Feeds_DB.vb:line 63

1 Ответ

0 голосов
/ 25 августа 2011

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

Не пытайтесь удалять «миллион» строк одновременно, это блокирует таблицу на длительный период

DECLARE @top int = 1000;

WHILE 1=1
BEGIN
    DELETE TOP (@top)
    FROM MyTable
    WHERE dateEntered < @date;

    IF @@ROWCOUNT = 0 BREAK;
    WAITFOR DELAY '00:00:00.003'
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...