删除大量行时如何防止事务日志无限期增长?

问题描述 投票:1回答:1

我正在使用循环删除块中的许多行。

WHILE EXISTS (SELECT 1 FROM dbo.Table WHERE LogTime < CAST('2018-11-05' AS 
  DATE))
  BEGIN
    BEGIN TRANSACTION T1
        DELETE TOP (1000) FROM dbo.Table 
        WHERE LogTime < CAST('2018-11-05' AS date);
    COMMIT;
END

我希望每个While循环周期都是一个以“ COMMIT”结尾的事务,因此在每个循环周期之后都会清除事务日志。

不幸的是,情况并非如此。在大约15分钟后的某个时间,查询由于“事务日志已满”而崩溃。然后开始回滚,它不仅回滚最后一个循环,而且回滚整个查询,包括所有其他循环。

sql-server transactions sql-delete
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.