如何管理 SQL Server 日志大小

Posted

技术标签:

【中文标题】如何管理 SQL Server 日志大小【英文标题】:How Can I Manage SQL Server Log Size 【发布时间】:2010-10-03 14:43:03 【问题描述】:

我正在尝试管理 SQL Server 2008 日志文件的大小。我有一个每天加载一次的报告数据库。简单恢复模式是最合适的,因为除了早上的负载之外没有任何事务,我可以重新创建这些记录。我的目标是使事务日志的大小固定,足够大以至于在加载期间不必分配新空间。

我的问题是日志不断增长。我知道日志应该被标记为重复使用,但为什么日志一直在增长? log_reuse_wait_desc 显示“Nothing”。

我可以将日志文件缩小到 1 MB,因此我知道其中没有任何事务。我可以设置一个工作来执行此操作,但我更愿意将日志保留为 500MB,这足以处理日常负载。如果我这样做,日志会增长。

如何使日志保持一致的大小?

请注意:缩小日志文件并不能解决此问题。我知道该怎么做。我正在尝试找到一种方法来重新使用事务日志中的空间。

【问题讨论】:

您是否定期备份交易日志? 我最近回答了一个类似的问题:http://***.com/questions/453858/sql-server-log-file-confusion#454137 由于这里的恢复模式是SIMPLE,因此不提供事务日志备份作为选项。事务日志仍然可以在“检查点”之间填满,在这种情况下,他必须调整日志文件的大小,或者将其更改为不受限制的增长(顺便说一下,仍然显示为“受限制的”增长,最大大小为 2,097,152 MB) .有关更多信息,请参阅此链接:social.msdn.microsoft.com/Forums/sqlserver/en-US/… ...或者他可以更改日志文件的最大大小。 【参考方案1】:

日志文件用于事务目的,即使数据库处于简单恢复模式。如果 LOG 大小确实增长到超过 500 MB,则表明有人正在运行需要该空间的查询或存储过程。

例如,您可能正在针对您的报告表创建索引。这将在事务中完成,以便在发生错误时可以回滚更改。但是,一旦完成,使用的空间将被释放用于其他事务。

因此,如果日志大小从 1MB 开始并增加到 700MB,那么正在执行需要该空间的操作。如果将大小锁定为 500MB,最终会收到“日志文件空间不足”错误。

但如果你真的想将其修复为 500MB,你可以执行以下操作: (我使用的是 SQL Server 2005)

    启动 Microsoft SQL Server Management Studio 找到您的数据库并右键单击它。选择属性。 点击文件部分 找到 LOG FILE 行。 将初始大小更改为:500 找到 Autogrowth 部分并单击椭圆 (...) 取消选中“启用自动增长”。点击确定。 单击“确定”进行更改。

注意:您还可以在“自动增长部分”中设置最大日志文件大小。

或者,您可以使用以下脚本进行更改。将 DATABASENAME 替换为适当的值。如果需要,还可以更改日志文件名。

USE [master]
GO
ALTER DATABASE [DatabaseName] MODIFY FILE ( NAME = N'DATABASENAME_Log', SIZE = 512000KB , FILEGROWTH = 0)
GO

【讨论】:

【参考方案2】:

DBCC Shrinkfile 命令允许您指定目标大小:

DBCC SHRINKFILE (DataFile1, 7)

将文件 DataFile1 缩小到 7MB

文档地址:MSDN

【讨论】:

【参考方案3】:

您可以使用 DBCC SHRINKFILE 来执行此操作。

【讨论】:

【参考方案4】:

创建一个备份数据库并缩小日志的维护作业

【讨论】:

我有一份备份数据库的工作。我可以缩小日志。但是,这并不能解决问题,因为导入作业运行时日志必须分配空间。

以上是关于如何管理 SQL Server 日志大小的主要内容,如果未能解决你的问题,请参考以下文章

如何清除SQLserver 日志

SQL Server:如何增加事务日志的大小?

如何在 SQL Server 中跟踪日志文件大小的演变?

SQL SERVER 2000数据库日志文件过大如何解决

怎样在SQL Server 2000中收缩数据库

SQL Server 数据库事务日志文件大小急剧增加