如何管理SQL Server日志大小

时间:2009-01-26 18:47:02

标签: sql-server transaction-log

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

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

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

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

请注意:缩小日志文件无法解决此问题。我知道该怎么做。我正试图在事务日志中找到一种方法来重用。

4 个答案:

答案 0 :(得分:25)

日志文件用于事务目的,即使数据库处于SIMPLE RECOVERY MODE中也是如此。如果LOG大小确实超过500 MB,那么有人正在运行需要该空间的查询或存储过程。

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

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

但如果您真的想以500MB修复它,您可以执行以下操作: (我正在使用SQL Server 2005)

  1. 启动Microsoft SQL Server Management Studio
  2. 找到您的数据库并右键单击它。选择属性。
  3. 点击文件部分
  4. 找到LOG FILE行。
  5. 将初始大小更改为:500
  6. 找到Autogrowth部分,然后单击椭圆(...)
  7. 取消选中“启用自动增长”。单击“确定”。
  8. 单击“确定”进行更改。
  9. 注意:您还可以在“自动增长部分”中设置最大日志文件大小。

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

DBCC SHRINKFILE (DataFile1, 7)

将文件DataFile1缩小为7MB

文件:MSDN

答案 3 :(得分:0)

在我的头顶,你可以使用DBCC SHRINKFILE来做到这一点。