数据库事务超时问题

时间:2009-12-09 00:13:05

标签: asp.net sql-server database linq-to-sql transactions

我遇到了一个错误,我认为是由于处理大量数据并将数据读入数据库导致数据库超时造成的。

我不断收到此错误消息:

  

分布式事务已完成。   要么以新的形式登记此会话   事务或NULL事务。

我计时超时需要多长时间,并且持续大约60秒。因此,我认为它可能与组件服务(Windows XP)中设置的事务超时限制(默认60秒)有关。我把它增加到300秒。

当这不起作用时,我通过添加:

编辑了machine.config文件
<system.transactions>
  <machineSettings maxTimeout="02:00:00" />
</system.transactions>

这也不起作用。

我不相信它与我的数据有任何关系。它是从excel电子表格中读取的。当我将电子表格剪切成两个单独的文件时,它运行正常。

希望,我只是遗漏了一些简单的东西,比如某处的另一个最大超时设置。

希望有人之前遇到过这个问题!

编辑:我正在使用SQL Server和Linq2SQL。

3 个答案:

答案 0 :(得分:4)

安德鲁,我不认为这是由超时引起的。否则您将收到特定的超时错误。这很可能是编程错误。我自己也遇到过这种情况,而且几乎总是这是我制作糟糕的代码导致了这个问题。

我认为你有另一个问题。让交易运行这么长时间并不是一个好主意。如果你的公司有DBA,他们很可能会出于这个原因。你在很长一段时间内锁定了大量资源。有些东西会受此影响。

顺便说一句,如果您担心超时,请检查连接字符串的超时设置。

兰迪

答案 1 :(得分:1)

我不知道为什么,但我通过进入 web.config 并添加:

来解决问题
<system.transactions>
  <defaultSettings timeout="02:00:00"/>
</system.transactions>

我认为此设置将继承自machine.config。也许它们是两种不同的超时设置?我不知道。

如果有人有其他说明,请发表评论!

编辑1:此外,如果有人使用ASP.NET Ajax控件,请确保增加脚本管理器的AsyncPostBackTimeout属性以适应更长的时间。

编辑2:我删除了我添加到machine.config中的行,并将分布式事务超时设置重置为默认值。这似乎没有任何影响,只是对web.config文件和脚本管理器的更改,我的程序运行正常。

答案 2 :(得分:0)

要更改超时,可以在数据上下文中设置CommandTimeout属性:

var db = new YourDataContext();
db.CommandTimeout = 300;

话虽如此,每当你进行分布式交易时,值得仔细研究原因,并尽可能避免使用它们 - 你的问题可能与此有关而不是超时。 ...