首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该在每一批执行后提交吗?

我应该在每一批执行后提交吗?
EN

Stack Overflow用户
提问于 2014-07-16 05:25:07
回答 2查看 5.8K关注 0票数 2

我有一万亿个记录文件。批处理大小为1000,然后执行批处理。

我应该在每一批之后提交吗?还是在所有1万亿条记录被批量执行1000次之后,只提交一次?

代码语言:javascript
复制
{
// 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 ????
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-16 05:35:10

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

但是,数据库系统可能存在一些限制,需要使用自己的commit将行分成几个批。由于数据库必须预留一些空间才能进行回滚,除非提交了更改,因此巨大事务大小的“成本”可能会非常高。

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

票数 4
EN

Stack Overflow用户

发布于 2021-10-13 11:13:55

这在很大程度上取决于你想要实现什么,通常你需要在某件事情上妥协才能取得一些成就。例如,我正在删除我的用户不再使用存储过程访问的300万条记录。

如果我一次执行delete查询,table lock就会升级,而我的其他用户开始在我们的应用程序中获取超时问题,因为表已经被SQL Server锁定(我知道这个问题并不是特定于Server的,但可以帮助调试问题),以便使删除过程具有更好的性能,如果存在这种情况,则永远不会选择大于5000的批处理。(见锁提升阈值)

用我目前的计划,我正在删除每批3000行,只有密钥锁正在发生,这是很好的,我是提交后,50万记录被处理。

因此,如果不希望同时使用用户访问表,那么如果数据库服务器有足够的日志空间和处理速度,但是1万亿条记录是一团糟,则可以删除大量的记录。最好按批处理方式删除,或者如果1万亿条记录是表中的总记录,并且要删除所有这些记录,那么我建议使用一个truncate表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24772789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档