在批量导入中按最小方式记录日志的前提条件
适用于:SQL Server
对于完整恢复模式下的数据库,大容量导入执行的所有行插入操作都会完整地记录在事务日志中。 如果使用完整恢复模式,大型数据导入会导致填充事务日志的速度很快。 相反,对于简单恢复模式或大容量日志恢复模式,大容量导入操作的最小日志记录减少了批量导入操作填满日志空间的可能性。 另外,最小日志记录的效率也比按完整方式记录日志高。
注意
大容量日志恢复模式旨在于大容量操作期间临时替换完整的恢复模式。
在批量导入操作中按最小方式记录日志的表要求
最小日志记录要求目标表满足下列条件:
当前没有复制表。
指定了表锁定(使用 TABLOCK)。
注意
尽管在最小日志记录的批量导入操作过程中,数据插入操作没有记录在事务日志中,但每当为表分配新盘区时,数据库引擎仍会记录盘区分配信息。
表不是内存优化表。
对于某个表,是否进行最小日志记录还取决于该表是否有索引,如果有,则还取决于该表是否为空:
如果表没有索引,则按最小方式记录数据页。
如果表没有聚集索引但是有一个或多个非聚集索引,则始终按最小方式记录数据页。 但是,记录索引页的方式取决于该表是否为空:
如果该表为空,则按最小方式记录索引页。 如果您以空表开始并分多批大容量导入数据,则对于第一批,将按最小方式记录索引页和数据页,但从第二批开始,将只按最小方式记录数据页。
如果该表不为空,则按完整方式记录索引页。
如果其中一个索引有 IGNORE_DUP_KEY = ON ,则将完全记录索引和数据页。
如果表有聚集索引且为空,则按最小方式记录数据页和索引页。 相反,如果表有基于 B 树的聚集索引且不为空,则无论采用何种恢复模式,均按完整方式记录数据页和索引页。 如果以空的行存储表开头并批量导入数据,则对于第一批,将按最小方式记录索引页和数据页,但从第二批开始,将只按批量方式记录数据页。
注意
文档在提到索引时一般使用 B 树这个术语。 在行存储索引中,数据库引擎实现了 B+ 树。 这不适用于列存储索引或内存优化表上的索引。 有关详细信息,请参阅 SQL Server 以及 Azure SQL 索引体系结构和设计指南。
有关记录群集列存储索引 (CCI) 的信息,请参阅列存储索引数据加载指南。
注意
启用事务复制时,将完全记录 BULK INSERT 操作,即使处于大容量日志恢复模式下也是如此。
另请参阅
- 恢复模式 (SQL Server)
- bcp 实用工具
- BULK INSERT (Transact-SQL)
- OPENROWSET (Transact-SQL)
- BACKUP (Transact-SQL)
- ALTER DATABASE (Transact-SQL)
- 表提示 (Transact-SQL)
- INSERT (Transact-SQL)