事务日志会在SQL Server中自动缩小吗?


10

当SQL Server数据库处于SIMPLE模式时,您不必关心事务日志的麻烦。但是在简单模式下,事务日志似乎像在完整模式下一样增长。是否在某个时间点自动截断?还是我必须手动截断/缩小?

Answers:


19

它会自动截断,但收缩截然不同。截断可回收日志空间以供重用,物理缩小可减小文件大小,以将空间释放回操作系统。如果您的日志已经增长到当前大小,那么如果您缩小日志,它可能会再次增长。

我建议您了解系统的典型日志使用量和最大日志使用量。下面的查询(不是我的查询,是从Glen Berrys DMV脚本增强的查询)可以手动运行,也可以通过代理作业将输出捕获到表中。如果将其记录到表中一周左右,您将获得典型用法的图片,更重要的是,当某个过程导致日志增长超出预期时,将获得更多使用情况。

SELECT 
     db.[name] AS [Database Name]
   , db.recovery_model_desc AS [Recovery Model]
   , db.log_reuse_wait_desc AS [Log Reuse Wait Description]
   , ls.cntr_value AS [Log Size (KB)]
   , lu.cntr_value AS [Log Used (KB)]
   , CAST(
        CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT) 
        AS DECIMAL(18,2)
     ) * 100 AS [Log Used %]
   , db.[compatibility_level] AS [DB Compatibility Level]
   , db.page_verify_option_desc AS [Page Verify Option]
   , db.is_auto_create_stats_on, db.is_auto_update_stats_on
   , db.is_auto_update_stats_async_on, db.is_parameterization_forced
   , db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on
FROM sys.databases AS db
   INNER JOIN sys.dm_os_performance_counters AS lu 
     ON db.name = lu.instance_name
   INNER JOIN sys.dm_os_performance_counters AS ls 
     ON db.name = ls.instance_name
WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%' 
   AND ls.counter_name LIKE N'Log File(s) Size (KB)%'
   AND ls.cntr_value > 0 
OPTION (RECOMPILE);

事务日志截断描述了何时以及为什么发生日志截断。

如果从未从事务日志中删除日志记录,它将最终填满物理日志文件可用的所有磁盘空间。日志截断会自动释放逻辑日志中的空间,以供事务日志重用。

可能会延迟日志截断的因素是了解为什么您的日志可能无法截断并因此变得比预期的大的有用参考。


4

不,不

  • 它不会收缩或截断(在物理LDF意义上,它将在逻辑上起作用)
  • 它必须是它的大小,以便您不要缩小它

如果缩小,它将再次增长,并且文件碎片


0

如前所述,不,它不会自动收缩。但是它将清理一些垃圾。

原因是,在完全恢复模型中,您告诉SQL您要进行tlog备份以进行时间点恢复,因此它将记录针对数据库进行的所有事务。

由于您要告诉它您想要时间点恢复,因此您需要执行完整备份和日志备份。完成tlog备份后,它将刷新日志内容(尾端除外)并重新开始。

如果您将这些文件视为容器,则可能会有所帮助。

我的建议是,如果日志变得很大且难以管理,请削减完整备份。切换到SIMPLE恢复模型和热收缩的TLOG文件。切换回完整恢复模型并执行碎片维护*。就像其他人发布的那样,这不是最佳做法,并且会导致高度碎片化。

在那之后计划并开始一个备份机制。


* 索引重建/重组操作和磁盘级碎片整理。这不是日志维护的一部分:您可以通过备份来维护T日志。它们是接近容量时会增长的容器。重建/重组可以帮助从错误的日志管理中恢复,从而导致大量的驱动器使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.