我有一个 1 万亿的记录文件。批处理大小为 1000,之后执行批处理。
我应该在每个 Batch 之后提交吗?还是在所有 1 万亿条记录以 1000 条为一组执行后仅提交一次?
{
// 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 ????
最佳答案
提交标志着成功事务的结束。所以提交理论上应该在所有行都成功执行之后发生。 如果执行语句是完全独立的,那么每个人都应该有自己的提交(理论上)。
但是数据库系统可能存在限制,需要将行拆分为多个批处理,并提交自己的提交。由于数据库必须保留一些空间才能进行回滚,除非更改已提交,因此巨大事务大小的“成本”可能非常高。
所以答案是:这取决于您的要求、您的数据库和环境。
关于java - 我应该在每次执行批处理后提交吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24772789/