可能延迟日志截断的因素

日志截断释放日志文件的空间,以便由事务日志重新使用。由于日志处于活动状态的部分不能通过收缩来截断或删除,因此,当日志记录长时间保持活动状态时,截断可能延迟。

注意注意

有关日志截断的工作原理,请参阅事务日志截断

日志记录可以在各种不同条件下保持活动状态,本主题对此进行了介绍。您可以使用 sys.databases 目录视图的 log_reuse_waitlog_reuse_wait_desc 列来发现是什么(如果有)阻止了日志的截断。

注意注意

其中某些因素(例如,长时间运行的事务或暂停的数据库镜像会话)都可导致事务日志填满。有关如何响应已满事务日志的信息,请参阅解决事务日志已满的问题(错误 9002)

下表简要介绍了 sys.database 目录视图的 log_reuse_waitlog_reuse_wait_desc 列的值。

log_reuse_wait 值

log_reuse_wait_desc 值

说明

0

NOTHING

当前有一个或多个可重复使用的虚拟日志文件。

1

CHECKPOINT

自上次日志截断之后,尚未出现检查点,或者日志头部尚未跨一个虚拟日志文件移动(所有恢复模式)。

这是日志截断延迟的常见原因。有关详细信息,请参阅检查点和日志的活动部分

2

LOG_BACKUP

需要日志备份,以将日志的头部前移(仅适用于完整恢复模式或大容量日志恢复模式)。

注意注意
日志备份不会妨碍截断。

完成日志备份后,日志的头部将前移,一些日志空间可能变为可重复使用。

3

ACTIVE_BACKUP_OR_RESTORE

数据备份或还原正在进行(所有恢复模式)。

数据备份与活动事务的运行方式相同。数据备份在运行时,将阻止截断。有关详细信息,请参阅本主题后面的“数据备份操作与还原操作”部分。

4

ACTIVE_TRANSACTION

事务处于活动状态(所有恢复模式)。

  • 一个长时间运行的事务可能存在于日志备份的开头。在这种情况下,可能需要进行另一个日志备份才能释放空间。有关详细信息,请参阅本主题后面的“长时间运行的活动事务”部分。

  • 事务被延迟(仅适用于 SQL Server 2005 Enterprise Edition 及更高版本)。“延迟的事务”是有效的活动事务,因为某些资源不可用,其回滚受阻。有关导致事务延迟的原因以及如何使它们摆脱延迟状态的信息,请参阅延迟的事务

5

DATABASE_MIRRORING

数据库镜像暂停,或者在高性能模式下,镜像数据库明显滞后于主体数据库(仅限于完整恢复模式)。

有关详细信息,请参阅本主题后面的“数据库镜像与事务日志”部分。

6

REPLICATION

在事务复制过程中,与发布相关的事务仍未传递到分发数据库(仅限于完整恢复模式)。

有关详细信息,请参阅本主题后面的“事务复制与事务日志”部分。

7

DATABASE_SNAPSHOT_CREATION

正在创建数据库快照(所有恢复模式)。

这是日志截断延迟的常见原因,通常也是主要原因。

8

LOG_SCAN

正在进行日志扫描(所有恢复模式)。

这是日志截断延迟的常见原因,通常也是主要原因。

9

OTHER_TRANSIENT

当前未使用此值。

数据备份操作与还原操作

在任何备份或还原操作期间,都不会发生日志截断。在 SQL Server 2005 和更高版本中,可以在数据备份过程中进行日志备份。不过,日志截断不会在此类日志备份期间发生,因为所有事务日志必须可用于数据备份操作。如果数据备份阻止了日志的截断,则取消备份可能有助于解决备份直接导致的此问题。

有关日志截断的详细信息,请参阅事务日志截断

长时间运行的活动事务

活动事务要求日志从包含事务开始的日志记录开始,一直保持活动状态。例如,如果事务的开始和结束由用户控制,则导致长时间运行事务的一般原因是用户在开始事务之后便离开,而事务等待用户的响应。在上述情况下,虽然处于等待状态的事务本身会生成极小的日志,但仍会阻止日志截断,并使日志逐渐变大。

注意注意

有关如何避免事务长时间运行的信息,请参阅编写有效的事务

数据库镜像与事务日志

数据库镜像要求每个日志记录均保持活动状态,直到主体服务器实例从镜像服务器实例中接收到有关已将记录写入镜像服务器磁盘的通知。如果镜像服务器实例落后于主体服务器实例,则活动日志空间量将相应增加。在这种情况下,您最好停止数据库镜像,执行截断日志的日志备份,将该日志备份应用到镜像数据库(使用 WITH NORECOVERY),然后重新启动镜像。

重要说明重要提示

此外,在开始镜像之前,如果在执行完必要的日志备份之后又执行了任何其他日志备份,则还必须手动应用其他每个日志备份(始终使用 WITH NORECOVERY)。应用最新的日志备份之后,便可开始镜像。

有关详细信息,请参阅删除数据库镜像设置数据库镜像

事务复制与事务日志

合并复制和快照复制不影响事务日志的大小,但事务复制会影响。如果数据库包括一个或多个事务发布,则只有将与这些发布有关的所有事务传递到分发数据库之后才会截断日志。如果事务日志增长得过大,而且日志读取器代理按计划运行,请考虑缩短运行间的间隔,或将其设置为以连续模式运行。如果将其设置为以连续模式运行(默认值),请确保它正在运行。有关如何检查日志读取器代理状态的详细信息,请参阅如何查看与发布相关的代理的信息并执行此代理的任务(复制监视器)

此外,如果在发布数据库或分发数据库中设置了选项“sync with backup”,则直到备份了所有事务后,才会截断事务日志。如果事务日志增长过大,而且已设置了此选项,请考虑缩短事务日志备份间的间隔。有关如何备份和还原涉及事务复制的数据库的详细信息,请参阅快照复制和事务复制的备份和还原策略

管理复制

监视复制