生产中的控制台程序陷入僵局

时间:2011-12-21 16:52:50

标签: c# linq sql-server-2005 deadlock

我的生产服务器上有一个程序,它返回了这个错误:

  1. 我主要担心的是我的程序是否在生产服务器上 它在错误中返回我的源代码的位置?

  2. 还有什么是调试此类死锁错误的最佳方法 它是由服务器上缺少资源引起的吗?

  3.   

    事务(进程ID 73)在线程|上死锁通讯   用另一个进程缓冲资源并被选为   僵局受害者。重新运行该交易。 : 在   System.Data.SqlClient.SqlConnection.OnError(SqlException异常,   Boolean breakConnection)

         

    在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException   exception,Boolean breakConnection)

         

    在   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject   stateObj)

         

    在System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,   SqlCommand cmdHandler,SqlDataReader dataStream,   BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject   stateObj)

         

    在System.Data.SqlClient.SqlDataReader.HasMoreRows()

         

    at System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean   的setTimeout)

         

    在System.Data.SqlClient.SqlDataReader.Read()

         

    在   Microsoft.Data.Extensions.Materializer`1.d__a.MoveNext()

         

    在   Microsoft.Data.Extensions.Materializer`1.d__0.MoveNext()

         

    在   System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()

         

    在System.Collections.Generic.List 1..ctor(IEnumerable 1   集合)

         

    在System.Linq.Enumerable.ToList [TSource](IEnumerable`1 source)

         

    在Console.Export.DataProvider.ExportData(IEnumerable`1   activitiesParam)在D:\ Documents和   设置\ USER \桌面\ 11_16_2011 \ ITS \控制台\出口\ DataProvider.cs:行   44

         

    在D:\ Documents和中的Console.Export.WarDataProvider.GetValues()中   设置\ USER \桌面\ 11_16_2011 \ ITS \控制台\出口\ DataProvider.cs:行   31

         

    在Console.Export.ExportEngine.Export(IDataProvider提供商)中   D:\ Documents and   设置\ USER \桌面\ 11_16_2011 \ ITS \控制台\出口\ ExportEngine.cs:行   25

2 个答案:

答案 0 :(得分:1)

编译程序时,是否在调试而不是发布配置中编译?如果您进行调试构建并将文件部署到服务器,那么它将显示其他诊断信息,在这种情况下这可能是一件好事。

  • 关于调试此方法的最佳方法,我建议你做两件事: 使用try, catch blocks捕获并处理您的错误 程序
  • 将此程序与其陷入僵局的程序进行比较。你有一个 deadly embrace有时可以通过更改顺序来解决 在事务中引用了哪些表。

以下是handling Deadlocks的指南。

答案 1 :(得分:1)

可以使用Sql Profiler正确检查死锁,它有一些事件用于此

<强>但

它不会显示所有收集的有用信息 - 将事件保存为xml并挖掘此xmls内部可以为您提供有关该问题的更多信息

您可以使用sql server对死锁进行内部日志记录到自己的错误日志中。使用跟踪标志1222和1204控制行为。

如果涉及死锁语句的其中一个使用table或pk scan,那么通常正确的索引解决死锁问题