每次执行批处理后我应该执行COMMIT吗?

时间:2014-07-16 05:25:08

标签: java jdbc commit bind-variables

我有1万亿条记录文件。批次大小为1000,之后批次已执行。

我应该在每批后提交吗?或者,在1000个批次中执行1万亿条记录后,只提交一次?

{
// Loop for 1 Trillion Records
statement.AddBatch()

      if (++count % 1000 == 0) 
       {
       statement.executeBatch()
       // SHOULD I COMMIT HERE AFTER EACH BATCH ???
       }

} // End Loop
// SHOULD I COMMIT HERE ONCE ONLY ????

1 个答案:

答案 0 :(得分:3)

提交标志着成功交易的结束。因此理论上应该在所有行成功执行之后发生。 如果执行语句是完全独立的,那么每个人都应该拥有自己的提交(理论上)。

但是数据库系统可能存在一些限制,需要使用自己的提交将这些行分成几个批次。由于数据库必须保留一些空间才能进行回滚,除非进行更改,否则"成本"巨大的交易规模可能会非常高。

答案是:这取决于您的要求,数据库和环境。