在批量导入中按最小方式记录日志的前提条件

适用于:SQL Server

对于完整恢复模式下的数据库,大容量导入执行的所有行插入操作都会完整地记录在事务日志中。 如果使用完整恢复模式,大型数据导入会导致填充事务日志的速度很快。 相反,对于简单恢复模式或大容量日志恢复模式,大容量导入操作的最小日志记录减少了批量导入操作填满日志空间的可能性。 另外,最小日志记录的效率也比按完整方式记录日志高。

注意

大容量日志恢复模式旨在于大容量操作期间临时替换完整的恢复模式。

在批量导入操作中按最小方式记录日志的表要求

要实现最小日志记录,目标表必须满足以下条件:

  • 该表未被复制。

  • 已指定表锁定(使用 TABLOCK)。

    注意

    尽管在最小日志记录的批量导入操作期间,事务日志中不会记录数据插入操作,但每次向表分配新盘区时,数据库引擎仍会记录盘区分配。

  • 表不是内存优化表。

对于某个表,是否进行最小日志记录还取决于该表是否有索引,如果有,则还取决于该表是否为空:

  • 如果该表没有索引,则数据页仅进行最少日志记录。

  • 如果表没有聚集索引但是有一个或多个非聚集索引,则始终按最小方式记录数据页。 但是,记录索引页的方式取决于该表是否为空:

    • 如果该表为空,则对索引页采用最少日志记录。 如果您以空表开始并分多批大容量导入数据,则对于第一批,将按最小方式记录索引页和数据页,但从第二批开始,将只按最小方式记录数据页。

    • 如果该表非空,则会对索引页进行完整日志记录。

    • 如果其中一个索引带有 IGNORE_DUP_KEY = ON,则索引页和数据页都会被完全记录到日志中。

  • 如果表有聚集索引且为空,则按最小方式记录数据页和索引页。 相反,如果表有基于 B 树的聚集索引且不为空,则无论采用何种恢复模式,均按完整方式记录数据页和索引页。 如果一开始是空的行存储表,并且分批大容量导入数据,则第一批中索引页和数据页都采用最小日志记录;但从第二批开始,只有数据页采用大容量日志记录。

    注意

    文档在提到索引时一般使用 B 树这个术语。 在行存储索引中,数据库引擎实现了 B+ 树。 这不适用于列存储索引或内存优化表上的索引。 有关详细信息,请参阅 SQL Server 以及 Azure SQL 索引体系结构和设计指南

  • 有关聚集列存储索引 (CCI) 的日志记录信息,请参阅 列存储索引数据加载指南

注意

启用事务复制后,即使在大容量日志恢复模式下,BULK INSERT 操作也会被完整记录到日志中。

后续步骤