【问题标题】:SQL Server 2005 transaction log is always too bigSQL Server 2005 事务日志总是太大
【发布时间】:2010-02-03 10:37:07
【问题描述】:

我已阅读其他帖子并进行了数小时的研究,但仍然没有更明智。 我有一个数据库,数据文件中有 65 gig,当前日志文件中有 230 gig。我正在尝试重新设计数据库以提高效率,但是在进行架构更改时,日志文件试图变得太大,并且 Windows 抱怨它的磁盘空间不足。

我已尝试缩小文件,但它的最低值约为 220 gig。使用 DBCC OPENTRAN 我可以看到没有活动的事务。使用 select * FROM sys.dm_tran_database_transactions 我可以看到没有什么有趣的事情发生。

我对我所读内容的解释是,只有在存在活动事务并且提交所有事务后,日志文件才应该很大,理论上该文件应该能够缩小到非常小的东西。正确的?

我尝试使用 truncate_only 后跟 dbcc shrinkfile (dbname, 2) 备份日志

如何将此文件缩小到更易于管理的内容?

【问题讨论】:

    标签: sql-server-2005 transaction-log


    【解决方案1】:

    您读过 Kimberly Tripp 的文章吗? (几乎是该主题的规范参考):8 Steps to better Transaction Log throughput

    您可能会遇到 VLF 碎片:Transaction Log VLFs - too many or too few?。运行此命令找出:

    DBCC LOGINFO;
    

    您是否按照这个标准程序来缩小日志:

    1) 备份您的事务日志(即使您处于简单模式)以清除所有活动。

    BACKUP LOG [MyDB] 
    TO DISK = N'E:\db.bak' 
    GO 
    

    2) 收缩事务日志。

    USE [MyDB]
    GO
    
    DBCC SHRINKFILE ('MyDB_Log', TRUNCATEONLY)
    GO
    

    3) 修改事务日志的大小并配置你的自动增长:

    USE [MyDB]
    GO
    
    ALTER DATABASE [MyDB] 
        MODIFY FILE ( NAME = N'MyDB_Log', SIZE = 1024000KB, FILEGROWTH = 1024000KB)
    GO 
    

    【讨论】:

    • 非常感谢。我没有看到那篇文章。对我来说,这是 VLF 碎片。如果其他人有此问题,请运行 DBCC LOGINFO;并查看返回的行数。该文章建议如果有> 50,那么碎片可能是一个问题。在文章中的第 8 点之后,日志文件现在只有 2mb,低于 230 gig!
    猜你喜欢
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2010-11-14
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多