删除过程中极度臃肿的事务日志

Ber*_*ter 3 sql-server delete transaction-log sql-server-2016

现在,我知道日志在大删除过程中会变大,应该尝试将其分成几批。但我觉得这种情况很奇怪,如果有人能向我解释,那就太好了!

我有一个 27GB 的数据库和大约 30GB 的日志。被删除的表大小约为 15GB,其中有 2000 万条记录。该表有 20 列,只有 bigint 和 int 数据类型。

删除操作是从相关表中删除 1800 万条重复记录。我已切换选择进行删除以确保记录计数匹配并且确实如此。

在我用完磁盘空间并被迫回滚之前,日志增长到大约 110GB。

表上没有触发器,只有16个非聚集索引,没有聚集索引。如果我在运行操作之前禁用所有索引,它会完成而不会从原始大小增加日志。

所以我的问题是,从表中删除时,我是否记录了每个索引的每次删除?如果是这样,这是正常行为还是可能是因为缺少聚集索引?

Dav*_*oft 5

所以我的问题是,从表中删除时,我是否记录了每个索引的每次删除?

你当然是。日志包含对每个页面的每次更改的记录,其中包含重做或撤消更改的足够详细信息。

如果是这样,这是正常行为还是可能是因为缺少聚集索引?

无关。您要从17 个单独的“索引”、16 个非集群索引和一个堆中的每一个中删除 1800 万行。

禁用/重建非聚集索引比删除/创建它们更安全,因为索引定义保留在服务器上。