2011-12-21 64 views
0

我有一个程序,我的生产服务器,返回此错误的:控制台程序僵持

  1. 我最关心的是,如果我的计划是在生产服务器上为什么 其返回的位置,我的源代码中的错误?

  2. 另外什么是调试这种类型的死锁错误和 是由服务器上缺乏资源造成的?

Transaction (Process ID 73) was deadlocked on thread | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction. : 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(TdsParserStateObject stateObj)

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

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

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

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

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

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

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

at System.Collections.Generic.List 1..ctor(IEnumerable 1 collection)

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

at Console.Export.DataProvider.ExportData(IEnumerable`1 activitiesParam) in D:\Documents and Settings\USER\Desktop\11_16_2011\ITS\Console\Export\DataProvider.cs:line 44

at Console.Export.WarDataProvider.GetValues() in D:\Documents and Settings\USER\Desktop\11_16_2011\ITS\Console\Export\DataProvider.cs:line 31

at Console.Export.ExportEngine.Export(IDataProvider provider) in D:\Documents and Settings\USER\Desktop\11_16_2011\ITS\Console\Export\ExportEngine.cs:line 25

+0

之一是这个计划在不同的线程中发出多个SQL命令,还是在尝试使用SQL DB时与其他软件冲突? – Turowicz 2011-12-21 16:56:04

+1

僵局并不直接与缺乏资源有关。简单地说:竞争SPID每个都有另一个想要的锁 – 2011-12-21 17:03:20

+0

@turowicx我不认为它正在运行多个线程,但它依次运行多个更新,一个接一个。 – 2011-12-21 17:16:42

回答

1

正确的死锁的检查可以用SQL事件探查器,它可以对一些事件来完成这个

它表明并非所有收集到有用的信息 - 保存事件XML和挖掘这个XML里面可以给你这个问题,

您可以使用内部日志更多信息通过sql server将死锁记录到它自己的错误日志中。该行为与跟踪标志1222和1204

控制通常情况下,正确的索引解决死锁问题,如果涉及死锁的语句使用表或PK扫描

1

当你编译程序你编译调试,而不是发布配置?如果您执行调试构建并将文件部署到服务器,则会显示其他诊断信息,在这种情况下这可能是件好事。

  • 至于调试这我会建议最好的方式,你做两件事情:使用 try, catch blocks捕获和你 程序处理错误。
  • 将此程序与死锁的程序进行比较。您有一个 deadly embrace,有时可以通过更改 中的顺序来解决哪些表在事务中被引用。

这里是对handling Deadlocks的指导。

+0

啊是的,因为它告诉我究竟哪些线路不通。我只是有点担心它实际上试图访问我的机器运行。 – 2011-12-21 17:15:25