SQL Server - 数据库备份后日志突然自动增长

Lui*_*cía 5 sql-server-2008 sql-server logging

我必须使用 SQL Server Management Studio 2012 管理 SQL Server 2008 数据库。数据库文件大约为 290Gb。我们遇到的问题是日志文件过去增长了很多。

做了一些互联网研究(我对数据库管理完全陌生),我得出了以下结论,并应用了所有这些结论:

  • 设置(我认为是)一个现实的初始日志大小;220 兆字节。
  • 将自动增长功能设置为以 MB(而不是 %)为单位增加。
  • 安排定期日志备份(目前每 15 分钟一次)。
  • 每天安排一次完整的数据库备份。
  • 我每 10 秒安排了 4 个 UPDATE 任务以保持日志增长。这些任务在 21000 条记录上执行。

这个配置似乎工作正常。我一直在监视日志大小的行为,它从不需要自动增长;当日志文件的保留空间即将满时,计划备份将再次释放它。11 小时后,日志大小仅增加到 260MB,我认为还可以(11 小时内自动增长 4x10Mb)。

所以我回家了,相信这种行为会持续到晚上。但是第二天,我看到已经进行了几次自动生长。日志大小从 220 Mb 增加到 2350 Mb(超过 200 次自动增长!)。

我决定不改变任何东西,并继续监控它;日志文件的已用空间从未增长超过 18%。我将自动增长大小从 10 Mb 增加到 50 Mb。

同样,我非常有信心这种配置将防止发生自动增长。再一次,我错了。今天早上我发现已经执行了一个新的自动生长过程。只有一次,但它仍然让我感到困惑。

我注意到最后一次自动增长操作发生在执行完整数据库备份之后。

如果这种行为是正常的,请任何人解释我吗?为什么日志大小整天保持稳定,数据库备份后突然变大?为什么它会增长,而日志文件的保留空间只有 20% 在高峰时间使用,就在日志备份之前?有什么推荐吗?

sep*_*pic 5

我想在评论中清除这一点,但没有空间这样做,所以我将其发布为答案。

虽然发生的事情的关键点是正确的,即完全备份导致日志增长,但Ste Bov给出的这个解释是完全错误的:

当您开始完整备份时,tLog 备份将从新的时间点开始工作,但在该备份完成之前它们无法工作,因此在此期间事务日志会增长,一旦完整备份完成,您现在有一个新的时间点和 tLog 备份现在将能够实际从事务日志中释放数据,并将返回到其正常使用水平

所有完整备份的第一个不会使“ tLog 备份将从中开始工作的新时间点”,是的,它会创建一个新的恢复点,但下一个日志备份将从上一个日志备份停止的点开始(日志文件中的这一点 last_LSN 被写入备份,可以使用 RESTORE HEADERONLY 或通过查询 msdb..backupset 来查看)

其次,从 SQL Server 2005 开始,并发日志和完整备份是可能的,你可以自己证明。相反,如果同时运行完整/差异备份则日志备份在完成时无法清除日志。这是因为差异/完全备份需要写出日志的“活动部分”*,以便在恢复时使数据库保持一致。

*准确地说,它不是“活动部分”,而是从 MIN(最后一个检查点的 LSN,最旧的活动事务的 LSN)到备份的数据读取部分结束的 LSN 的所有日志记录

因此,日志应该足够大,以便能够容纳在完整备份的整个持续时间内记录的所有活动。

更多关于这里:

Randal 的并发日志和完整备份

Randal 关于完整备份包含多少事务日志的更多信息