我使用TransactionScope
来执行一些批量插入和更新。问题是,即使将TransactionScope
的超时设置为1小时,我也会在30分钟的时间内收到超时异常。TransactionScope超时过早发生?
而且异常后插入的批次的记录看似随意的量。例如,最后一个操作有12440个插入,在超时之后,有7673个记录插入表中。
SqlConnection
和SqlCommand
的超时都设置为int.MaxValue
。
我在做什么错?
这里是我的代码:
using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromHours(1)))
{
try
{
using (db = new DB())
{
//operations here
}
}
catch (Exception ex)
{
throw new Exception("DB Error:\r\n\r\n" + ex.Message);
}
transaction.Complete();
} // <--- Exception here: Transaction aborted (Inner exception: Timeout)
一个更大的(也可能更重要的)问题是“为什么几万个INSERTS需要这么长时间?” – 2011-05-28 05:43:29
它可能是一个* Command Timeout *发生(因此是一个* TransactionScope超时*的红鲱鱼)?这可以解释“随机性”,考虑到记录插入的非常缓慢......我看到问题说设置为“MaxValue”,但我怀疑......问题不是它看起来的。 – 2011-05-28 06:14:22
@Mitch:它在一个非常缓慢的连接上完成了一个再见。因此,一小时超时限制:) @pst:插入循环完成。每次迭代设置CommandText并执行。所以这不是等待一个大SQL的结果,我怀疑这是一个命令超时。另外我使用一个非常简单的DAL,只有SqlConnection和SqlCommand,我没有看到任何其他的超时。我很乐意检查你能提出的其他建议吗? – dstr 2011-05-28 10:04:40