管理事务日志文件的大小

在某些情况下,在物理上收缩或扩展 SQL Server 数据库的事务日志的物理日志文件可能很有用。 本主题包含有关如何监视 SQL Server 事务日志大小、收缩事务日志、添加或扩大事务日志文件、优化 tempdb 事务日志增长率以及控制事务日志文件增长的信息。

监控日志空间利用情况

可以使用 DBCC SQLPERF(LOGSPACE)监视日志空间使用情况。 此命令返回有关当前使用的日志空间量的信息,并指示事务日志何时需要截断。 有关详细信息,请参阅 DBCC SQLPERF(Transact-SQL)。 有关日志文件的当前大小、最大大小和文件的自动增长选项的信息,还可以在sys.database_files中使用该日志文件的大小max_size增长列。 有关详细信息,请参阅 sys.database_files (Transact-SQL)

重要

建议避免重载日志磁盘。

收缩日志文件的大小

若要减小物理日志文件的物理大小,必须收缩日志文件。 如果知道事务日志文件包含不需要的未使用空间,这非常有用。 仅当数据库处于联机状态并且至少一个虚拟日志文件是免费的时,才会收缩日志文件。 在某些情况下,在下次日志截断之前,可能无法收缩日志。

注释

影响虚拟日志文件长期保持活动状态的因素(如长时间运行的事务),可能会限制日志收缩,甚至阻止日志收缩。 有关可能会延迟日志截断的因素的信息,请参阅事务日志(SQL Server)。

收缩日志文件会删除一个或多个不包含任何逻辑日志部分的虚拟日志文件(即< c0>非活动虚拟日志文件)。 当事务日志文件收缩时,将从日志文件末尾删除足够的非活动虚拟日志文件,以将日志减少到大约目标大小。

收缩日志文件(不收缩数据库文件)

监视日志文件收缩事件

To monitor log space

注释

可以将收缩数据库和日志文件设置为自动发生。 但是,建议禁止自动收缩,默认情况下, autoshrink 数据库属性设置为 FALSE。 如果 autoshrink 设置为 TRUE,则仅当超过 25% 的空间未使用时,自动收缩才会减小文件的大小。 文件将收缩至未使用空间占文件 25% 的大小,或者收缩至文件的原始大小,以两者中较大者为准。 有关更改autoshrink属性设置的信息,请参阅“查看或更改数据库的属性”-在选项页面上使用自动收缩属性-或在ALTER DATABASE SET 选项(Transact-SQL)上使用AUTO_SHRINK选项。

添加或放大日志文件

或者,可以通过扩大现有日志文件(如果磁盘空间允许)或向数据库添加日志文件(通常位于其他磁盘上)来获取空间。

  • 若要将日志文件添加到数据库,请使用 ALTER DATABASE 语句的 ADD LOG FILE 子句。 添加日志文件允许日志增长。

  • 若要放大日志文件,请使用 ALTER DATABASE 语句的 MODIFY FILE 子句,指定 SIZE 和 MAXSIZE 语法。 有关详细信息,请参阅 ALTER DATABASE (Transact-SQL)

优化 tempdb 事务日志的大小

重启服务器实例会将 tempdb 数据库的事务日志大小调整为其原始的预增长大小。 这可以减少 tempdb 事务日志的性能。 启动或重启服务器实例后,可以通过增加 tempdb 事务日志的大小来避免此开销。 有关详细信息,请参阅 tempdb 数据库

控制事务日志文件的增长

可以使用 ALTER DATABASE (Transact-SQL) 语句来管理事务日志文件的增长。 注意以下事项:

  • 若要更改当前文件大小(以 KB、MB、GB 和 TB 为单位),请使用 SIZE 选项。

  • 若要更改增长增量,请使用 FILEGROWTH 选项。 如果值为 0,则表明自动增长已设置为关闭,且不允许增加空间。 较小的自动增长增量可能会降低日志文件的性能。 因此,为了避免经常向日志文件中扩充内容,应该采用足够大的文件增量。 默认增长增量为 10% 通常适用。

    有关更改日志文件上的文件增长属性的信息,请参阅 ALTER DATABASE (Transact-SQL)

  • 若要控制日志文件的最大大小(以 KB、MB、GB 和 TB 为单位),或将增长设置为 UNLIMITED,请使用 MAXSIZE 选项。

另请参阅

BACKUP (Transact-SQL)
解决事务日志已满的问题(SQL Server 错误 9002)