我有(在我看来)SQL Server 日志增长的非常奇怪的行为。我有一个大约 8GB 日志大小的数据库。我备份了事务日志并开始删除大约 400 万行。日志文件没有增长。然后我尝试从另一个表中删除另外 490 万 - 日志文件增长到大约 26 GB 并填满了驱动器。
我设法解决了这个问题,但我很好奇 - 因为(据我所知)日志文件只包含删除记录的命令(在这种情况下),当数字时,2 个操作之间怎么会有这么大的差异受影响的行数仅相差 20%?
我有(在我看来)SQL Server 日志增长的非常奇怪的行为。我有一个大约 8GB 日志大小的数据库。我备份了事务日志并开始删除大约 400 万行。日志文件没有增长。然后我尝试从另一个表中删除另外 490 万 - 日志文件增长到大约 26 GB 并填满了驱动器。
我设法解决了这个问题,但我很好奇 - 因为(据我所知)日志文件只包含删除记录的命令(在这种情况下),当数字时,2 个操作之间怎么会有这么大的差异受影响的行数仅相差 20%?
评论太多了,但只是为了证明与简单的行数相比,数据量对记录多少有更大的影响。
首先,创建一个数据库,并备份它,这样我们就不是伪简单的了:
现在,创建一个瘦表和一个宽表,并插入 2,000 行:
备份日志两次:
有了清晰的日志,让我们删除每个表的一半(1,000 随机行):
我得到:
显然,与更瘦的表相比,从更宽的表中删除相同数量的行需要更多的日志空间。
作为逻辑扩展,索引的数量和宽度也会影响这种差异。而且我什至没有尝试 LOB 数据,也没有调查
AllocUnitName
NULL 所在的行。以上仅说明了 7 倍的差异。