提交/回滚与回滚到保存点的批处理DB2性能

提交/回滚与回滚到保存点的批处理DB2性能,db2,cobol,mainframe,Db2,Cobol,Mainframe,在COBOL批处理程序中,什么在性能方面更好 使用提交: IF SW-NEW-TRANSACT EXEC SQL COMMIT END-EXEC END-IF. PERFORM SOMETHING THRU SOMETHING-EXIT. IF SW-ERROR EXEC SQL ROLLBACK END-EXEC END-IF. 使用同步点: IF SW-NEW-TRANSACT EXEC SQL SAVEPOINT NAMEPO

在COBOL批处理程序中,什么在性能方面更好

使用提交:

IF SW-NEW-TRANSACT
  EXEC SQL
      COMMIT
  END-EXEC
END-IF.
PERFORM SOMETHING
   THRU SOMETHING-EXIT.
IF SW-ERROR
  EXEC SQL
      ROLLBACK
  END-EXEC
END-IF.
使用同步点:

IF SW-NEW-TRANSACT
  EXEC SQL
      SAVEPOINT NAMEPOINT ON ROLLBACK RETAIN CURSORS
  END-EXEC
END-IF.
PERFORM SOMETHING
   THRU SOMETHING-EXIT.
IF SW-ERROR
  EXEC SQL
      ROLLBACK TO SAVEPOINT NAMEPOINT
  END-EXEC
END-IF.

这根本不是性能问题

当您完成一个工作单元时,无论工作单元对您的应用程序意味着什么,您都要进行提交。通常,这意味着您已经处理了一个完整的事务。在批处理世界中,您会在1000到2000个事务之后进行提交,因此您不会将所有时间都花在提交上。数量取决于回滚时可以重新运行的事务数

当遇到某种错误(数据库错误或应用程序错误)时,将回滚


当您正在处理一个复杂的工作单元,并且希望在不进行完全提交的情况下保存您所做的工作时,您可能会遇到这种情况。换句话说,您将获取一个或多个保存点,然后最终进行提交。

这根本不是性能问题

当您完成一个工作单元时,无论工作单元对您的应用程序意味着什么,您都要进行提交。通常,这意味着您已经处理了一个完整的事务。在批处理世界中,您会在1000到2000个事务之后进行提交,因此您不会将所有时间都花在提交上。数量取决于回滚时可以重新运行的事务数

当遇到某种错误(数据库错误或应用程序错误)时,将回滚


当您正在处理一个复杂的工作单元,并且希望在不进行完全提交的情况下保存您所做的工作时,您可能会遇到这种情况。换句话说,您将获取一个或多个保存点,然后最终进行提交。

保存点和提交是不可互换的

进程总是必须在某个时刻提交或回滚数据库工作。承诺是 在事务之间(在完整的工作单元之间)执行。提交可以在每个事务之后进行,或者,正如批处理中常见的那样, 经过多次交易。承诺应该 切勿在事务处理过程中使用(这违背了工作单元的概念)

保存点通常在单个工作单元内获取并可能释放。保存点应始终在完成后释放 工作单位。它们总是在提交时被释放

目的 保存点的作用是允许从工作单元中进行部分回退。当一个流程从一系列公共事务开始时,这非常有用 数据库插入/更新之后是一个流程分支,在此分支中,可以在确定替代流程之前执行一些更新 分支应该已经执行了。保存点允许退出“死胡同”分支,然后继续使用备用分支 分支,同时保留常见的“前期”工作。如果没有保存点,退出“死胡同”可能需要大量数据 事务内的缓冲(复杂处理)或从事务开始使用某种标志进行回滚和重新执行 指示需要遵循替代流程分支。所有这些导致了复杂的应用程序逻辑。 回滚到保存点有几个优点。 它可以保留“预先”的工作,节省重做的成本。这样可以避免回滚整个事务。回滚可能更复杂 与原始插入/更新相比“昂贵”,并且可能跨越多个事务(取决于提交频率)。 最后,当数据库工作可以正常运行时,流程复杂性通常会降低 通过回滚到保存点选择性地“撤消”

如何使用保存点来提高批处理程序的效率?如果您的事务使用自诱导回滚来恢复 从“死胡同”的处理,然后节省点可以是一个巨大的好处。类似地,如果内部处理逻辑因 需要避免为类似的“回退”需求执行数据库更新,那么可以使用保存点将流程重构为 更简单一点,可能更有效的东西。除这些因素外,保存点不会影响性能 以积极的方式

一些人声称在批处理程序中具有高提交频率会降低性能。因此,提交频率越低 性能越好。调整提交频率并非易事。提交频率越低,数据库资源越长 因此,导致数据库超时的概率越大。数据库超时通常会导致 回滚的过程。回滚是一项非常昂贵的操作。回滚对DBMS本身和 事务重新启动后,需要再次重新应用所有更新。降低提交频率可能最终导致 你付出的比得到的多得多。当心

编辑

经验法则:提交是有代价的。回滚的成本较高

折扣回滚 由于坏数据、设备故障和程序异常终止(所有这些情况都很少见),大多数回滚都是由 进程间资源争用导致超时。执行更少的提交会增加数据库争用。做 更少的提交可能会提高性能。诀窍 是为了找出不提交权重所获得的性能与由于争用而导致的回滚成本之间的关系。那里 影响这一点的因素很多,可能是动态的。我的总体建议是去别处看看 为了提高性能,调优提交频率(超时不是问题)通常是低回报的 投资

改善批次性能的其他更有效的方法通常包括:

  • 通过负载拆分和运行同一作业的多个映像来改进并行性
  • 分析db/2绑定计划并优化访问路径
  • 分析批处理程序的行为并重构消耗资源最多的部分
保存点和提交是