交易开放数小时

时间:2014-11-24 10:59:47

标签: .net vb.net transactions timeout transactionscope

包装一个需要三个小时才能在TransactionScope中运行的进程有什么问题:

Dim transactionOptions As TransactionOptions = New TransactionOptions()
Using scope As New TransactionScope(TransactionScopeOption.Required, transactionOptions)
msgbox("Message Box 1")
scope.complete()
End Using
msgbox("Message Box 2")

从消息框1到消息框2需要大约五个小时。

我确信我在过去尝试了另一个长时间运行的进程,并且事务处理已经超时(我可能是错的),所以我在每个循环上都提交了。我读到了你应该尽可能多地提交的地方。我的方法有什么问题吗?

2 个答案:

答案 0 :(得分:1)

多久提交一次?基本上问题是:你最小的交易是什么?

考虑一个银行账户的例子(非常非常简化):您可能有10000个账户从一个账户转账到另一个账户,但如果您从账户A转账到账户B,(假设这将由两个账户完成)插入)这是一次交易 - 提交这个。然后是下一个。

答案 1 :(得分:1)

有四个基本属性..是的,每个人都知道它......被称为 ACID

这里只有第一个。

原子性:因此,该属性表示“在原子事务中,一系列数据库操作全部发生,或者什么也没发生。”
所以,假设你的5小时运行事务有10000个数据库操作。你真的想要他们全部发生(10000次操作)还是根本不发生?更好的方法是,您是否可以拆分更多的交易而不是单个交易?