适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 SQL 数据库
大规模索引操作可以产生大量数据负载,从而导致事务日志的空间很快被占满。 为了确保可以回滚索引操作,在索引操作完成之前,不能截断事务日志,但是,可以在索引操作期间备份日志。 因此,事务日志必须具有足够的空间,以存储索引操作期间的索引操作事务和任何并发用户事务。
这对脱机索引操作和联机索引操作都适用。 由于在脱机索引作期间无法访问基础表,因此用户事务可能很少,并且日志可能不会尽快增长。 联机索引作不会阻止并发用户活动,因此,大规模联机索引作与大量并发用户事务相结合可能会导致事务日志持续增长,而无需选择截断日志。
建议
运行大规模索引操作时,请考虑下列建议:
在联机运行大规模索引操作之前,请确保事务日志已备份和截断,并且日志有足够的空间来存储预计的索引和用户事务。
请考虑将选项设置为
SORT_IN_TEMPDBON以进行索引操作。 这将把索引事务与并发用户事务分开。 索引事务存储在事务日志中tempdb,并发用户事务存储在用户数据库的事务日志中。 这允许在索引操作期间,如有必要,将用户数据库的事务日志截断。 此外,如果tempdb日志与用户数据库日志不在同一磁盘上,则这两个日志不会争用相同的磁盘空间。注意
tempdb验证数据库和事务日志是否有足够的磁盘空间来处理索引作。 在索引操作完成之前,tempdb事务日志无法被截断。使用数据库恢复模型,它允许对索引操作做最小的日志记录。 这可能会减小日志的大小,并阻止日志填充日志空间。
不要在显式事务中运行联机索引操作。 在显式事务结束之前,不会截断日志。