【问题标题】:Is there an alternate strategy for truncating a large transaction log? (> 200gb)是否有截断大型事务日志的替代策略? (> 200GB)
【发布时间】:2018-01-17 19:36:13
【问题描述】:

我将尝试其他类似问题的答案之一,但想问一下,对于 200gb 的日志与我见过的大约 20gb 的许多示例截断事务日志是否会有所不同?

其他问题采用 20gb 事务日志并将其减少到 1mb,对于 10 倍大小的事务日志,策略是否不同?

【问题讨论】:

    标签: sql-server-2008 transaction-log


    【解决方案1】:

    “截断日志”是一个模棱两可的术语。我假设您的意思是使用 DBCC SHRINKFILE 缩小事务日志的 LDF 文件。

    不,过程没有显着差异。

    请记住:您可能需要将日志文件缩小两次,以使其缩小到您想要的大小,因为您的事务日志将被使用。

    1. 为所需的数据库运行DBCC LOGINFO,您将在事务日志中看到每个 VLF(虚拟日志文件)。状态为 2 的任何内容都处于活动状态并等待日志备份。如果您在不进行日志备份的情况下运行 DBCC SHRINKFILE,那么您可以收缩到的最小大小是最大的 StartingOffset + FileSize,其中 Status 为 2。

    2. 如果您运行事务日志备份,当前使用的 VLF 将保持状态 2。它仍在使用中,因此仍处于活动状态。据我所知,在 DBCC LOGINFO 中列出的具有最大 FSeqNo 的 VLF 是当前正在使用的 VLF。这意味着如果您执行 LOG BACKUP 并立即运行 DBCC SHRINKFILE,则最小大小将是具有最大 FSeqNo 的 VLF 的 StartingOffset + Filesize。您必须等待 VLF 填满并且服务器切换到新的 VLF,然后日志备份才会将此 VLF 标记为非活动状态,这将允许您将 DBCC SHRINKFILE 变小。

    因此,缩小日志文件的最佳策略是:

    1. 分析您的数据库和活动,找出问题所在以及原因。
    2. 根据您的使用情况确定事务日志的最佳大小。
    3. 运行备份日志。
    4. 运行 DBCC SHRINKFILE。
    5. 确定日志文件缩小了多少。
    6. 如果您的日志文件大小正确,那么您就完成了。
    7. 否则,请监视 DBCC LOGINFO 以查看 VLF 何时在文件中更早的时候滚动到新的 VLF。
    8. 转到 3。

    如果您需要生成事务日志数据以加快 #6,请考虑运行索引重建。

    请注意,只有在您正确管理服务器的情况下,上述 #1 和 #2 才有可能。您将来需要重新访问服务器才能完成它们,但它们对于防止将来出现问题至关重要。

    我还假设您没有运行简单恢复模式,因为使用简单恢复的数据库上的 200 GB 事务日志似乎相对不太可能。如果不太可能您正在运行简单恢复,那么您可以将上面的 BACKUP LOG 替换为 CHECKPOINT 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 2012-06-09
      • 2017-09-08
      • 2021-06-19
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多