批量导入中最小日志记录的先决条件

适用于:SQL Server

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

注意

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

最小日志记录批量导入操作的表要求

最小日志记录要求目标表满足下列条件:

  • 该表未复制。

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

    注意

    尽管在最小日志记录的批量导入操作过程中,数据插入操作没有记录在事务日志中,但每当为表分配新盘区时,数据库引擎仍会记录盘区分配信息。

  • 该表不是内存优化表。

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

  • 如果表没有索引,则按最小方式记录数据页。

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

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

    • 如果表为非空,则会完全记录索引页。

    • 如果其中一个索引IGNORE_DUP_KEY = ON,则会完全记录索引页和数据页。

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

    注意

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

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

注意

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

另请参阅

后续步骤