在sql中使用没有事务块的分块有什么好处?

What's the advantage of using chunking without transaction block in tsql?

我在我们代码库的 sql 存储过程中发现了一段代码,它使用没有事务块的分块。如果没有 tran 块,我看不出分块会有什么好处?当我在没有深入挖掘的情况下就得出结论时,我已经谦卑了几次,那么没有 tran 块的分块有什么优势呢?有吗?

伪代码是这样的:

SQL 服务器中的每个更新查询都在事务中运行,无论它旁边是否有 BEGIN TRAN。 (autocommit transaction 如果 implicit_transaction 未开启)

"Chunking" 通常用于在数据库处于简单恢复模式时停止需要增加大小的事务日志。影响 100 万行的单个 UPDATE 语句将需要将所有这些记录到活动日志中。分成批次可以允许较早提交的批次中的日志被截断并由以后的批次重用。

还可以通过减少每个操作的时间长度来减少对并发查询的影响and/or通过一次只更新几千行来潜在地降低锁升级的风险。