导致日志截断延迟的因素
更新日期: 2006 年 7 月 17 日
日志截断可释放日志文件中的空间,以供事务日志重新使用。 由于日志的活动部分不能通过收缩来截断或删除,因此,当日志记录长时间保持活动状态时,截断将被延迟。
注意: |
---|
有关日志截断工作原理的信息,请参阅事务日志截断。 |
日志记录可在许多情况下保持活动状态,这将在本主题中加以介绍。 可以通过下面的方法查找阻止日志截断的原因(如存在):使用 sys.databases 目录视图的 log_reuse_wait 列和 log_reuse_wait_desc 列。
注意: |
---|
其中某些因素(例如,长时间运行的事务或暂停的数据库镜像会话)都可导致事务日志填满。 有关如何响应已满事务日志的信息,请参阅解决事务日志已满的问题(错误 9002)。 |
下表介绍了 sys.database 目录视图的 log_reuse_wait 列和 log_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 NO_LOG 可有助于避免出现阻止日志截断的问题。
有关日志截断的详细信息,请参阅事务日志截断。
重要提示: |
---|
未来版本的 SQL Server 将删除 BACKUP LOG 语句的 NO_LOG 和 TRUNCATE_ONLY 选项。 这些选项通过放弃活动日志以外的所有日志,在无需备份日志副本的情况下删除不活动的日志部分,并截断日志。 这会打断日志链。 在下一次完整备份或差异数据库备份之前,将无法为数据库提供媒体故障保护。 因此,极力建议您在新的开发工作中避免使用这两个选项,并建议您计划修改当前使用这两个选项的应用程序。 |
长时间运行的活动事务
活动事务要求日志从包含事务开始的日志记录开始,一直保持活动状态。 例如,如果事务的开始和结束由用户控制,则导致长时间运行事务的一般原因是用户在开始事务之后便离开,而事务等待用户的响应。 在上述情况下,虽然处于等待状态的事务本身会生成极小的日志,但仍会阻止日志截断,并使日志逐渐变大。
注意: |
---|
有关如何避免事务长时间运行的信息,请参阅编写有效的事务。 |
数据库镜像与事务日志
数据库镜像要求每个日志记录均保持活动状态,直到主体服务器实例从镜像服务器实例中接收到有关已将记录写入镜像服务器磁盘的通知。 如果镜像服务器实例落后于主体服务器实例,则活动日志空间量将相应增加。 在这种情况下,您最好停止数据库镜像,执行截断日志的日志备份,将该日志备份应用到镜像数据库(使用 WITH NORECOVERY),然后重新启动镜像。
重要提示: |
---|
此外,在开始镜像之前,如果在执行完必要的日志备份之后又执行了任何其他日志备份,则还必须手动应用其他每个日志备份(始终使用 WITH NORECOVERY)。 应用最新的日志备份之后,便可开始镜像。 |
事务复制与事务日志
合并复制和快照复制不影响事务日志的大小,但事务复制会影响。 如果数据库包括一个或多个事务发布,则只有将与这些发布有关的所有事务传递到分发数据库之后才会截断日志。 如果事务日志变得过大,并且日志读取器代理是按照预定的时间间隔运行的,请考虑缩短其运行的间隔时间。 或者,将其设置为在连续模式下运行。 如果将其设置为以连续模式运行(默认值),请确保它正在运行。 有关如何检查日志读取器代理状态的详细信息,请参阅如何查看与发布相关的代理的信息并执行此代理的任务(复制监视器)。
此外,如果在发布数据库或分发数据库中设置了选项“sync with backup”,则直到备份了所有事务后,才会截断事务日志。 如果事务日志增长过大,而且已设置了此选项,请考虑缩短事务日志备份间的间隔。 有关如何备份和还原涉及事务复制的数据库的详细信息,请参阅快照复制和事务复制的备份和还原策略。
管理复制
监视复制
请参阅
概念
检查点和日志的活动部分
事务日志截断
收缩事务日志
解决事务日志已满的问题(错误 9002)