多线程应用程序的存储过程 - 超时已过期。超时时间过去了

时间:2011-07-05 16:10:33

标签: sql vb.net visual-studio-2010 sql-server-2008

我有一个使用taskfactory的应用程序,它创建了多个任务,将记录插入到数据库的同一个表中。我有一些工作,当它变得太大并且在sql server management studio中的选项中将执行超时设置为0时清理表。当尝试使用存储过程执行插入并将异常处理过程设置为睡眠并再次尝试时,我在任务上不断收到以下错误。这没有任何帮助,因为它似乎几乎每次尝试都会超时。 不知道如何处理这个并确保表处理所有这些插入。尝试在其中一个进程connectionstring中包括connect timeout = 600,但这没有帮助。

还要将注册表中的sqlquerytimeout值设置为90,但仍然没有帮助。

欣赏回应。

错误:超时已超过操作完成前经过的超时时间或服务器没有响应...

由于必须以这种方式设置visual studio 2010调试选项,

无法看到错误的详细信息,但我将设置响应流并捕获

但是我重新启动了sql server,现在一切都很好......不知道为什么。

错误再次发生。

   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 :(得分:0)

如果表中没有索引超载或DB结构中的严重错误,则将行插入表中的速度足够快。我认为应该在锁中找到问题

不要一次尝试删除“百万”行,它会长时间锁定表

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;