如果我通过不提交交易持续时间过长会发生什么

时间:2014-12-18 01:13:31

标签: vb.net transactions db2

我有一个代码

    Dim cmd As New DB2Command
    Dim trs As DB2Transaction = Nothing
    trs = ConnDB2.BeginTransaction(IsolationLevel.ReadCommitted)
    cmd.Transaction = trs
    cmd.Connection = ConnDB2
    cmd.CommandText = Query
    cmd.ExecuteNonQuery()

    While (true)

    End While

    trs.Commit()

我在多线程环境中执行此操作,当所有线程的executeNonQuery都没有给出错误时,while循环将中断并允许所有事务一起提交。我想问一下,如果while循环在允许它提交前5分钟执行,会发生什么?连接是否超时或其他什么?

1 个答案:

答案 0 :(得分:0)

在这种情况下可能会发生两件坏事。

首先,每个事务都会保持锁定,直到它被提交为止。这意味着请求锁定相同行的其他线程或应用程序可能会收到锁定超时错误或无限期等待,具体取决于其锁定超时设置。

其次,即使没有锁冲突,您的数据库也可以体验所谓的日志饱和度。如果事务日志文件由未提交的事务使用,则无法重用或归档,因此分配的日志文件数将增加,直到达到配置的限制,然后不能启动新事务,因此所有数据库活动将基本停止直到你提交最早的交易。

正如@ Clockwork-Muse所说,您希望您的交易尽可能短。我无法想象你有意提交所有线程的商业原因'同时进行交易。