【问题标题】:Sql Server Setting max file size lead to faile transactionsSql Server 设置最大文件大小导致事务失败
【发布时间】:2018-02-22 13:51:17
【问题描述】:

我有一个日志文件大小为 700 MB 的数据库。现在我已将其最大文件大小固定为 1 GB。 当达到 1 GB 时,事务失败,同样的原因是“数据库的事务日志已满。要找出日志中的空间无法重用的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列”

如果我取消选中日志文件的自动增长,情况也是如此。

当我检查 sys.databases 中的 log_reuse_wait_desc 列时,它显示“Active_Transaction”。

我不明白为什么 Sql server 没有保持最大文件大小限制。为什么它不能删除旧日志或类似的东西来保持最大文件大小。 它是如何工作的。

我想要的是将日志文件大小限制在任何情况下都不超过 1 GB。

【问题讨论】:

  • 然后阅读simple and full recovery models 之间的区别,并进行日志备份。如果您的恢复模型已经很简单和/或您已经在进行日志备份并且它仍然不会缩小,那么您遇到了一个更有趣的问题。
  • 感谢您的信息。我的数据库是完全恢复模式。如果设置了文件大小,我无法理解为什么 sql 不删除旧日志。

标签: sql-server


【解决方案1】:

您需要在此处考虑一些事项,尤其是如果您想将日志文件大小限制为 1GB。

  1. 如前所述,您需要了解区别 三种恢复模式之间。进行日志备份是一项关键任务 使用完全恢复模式时。然而这只是一部分 问题;日志备份只截断日志的非活动部分, 因此,一个事务可以用 1GB 以上的数据填充日志文件, 然后您将处于与现在相同的位置...即使您处于简单恢复模式(日志备份在这里对您没有帮助!)。
  2. 在理想情况下,您不会因为这个问题而以这种方式限制日志文件。如果可能的话,你想让它自动增长,所以理论上它可以填满磁盘。
  3. 事务日志管理本身就是一门科学。 Kimberly Tripp 对如何管理事务日志吞吐量有一些非常好的建议here
  4. understanding VLF's 可让您更好地管理事务日志,并有助于更好地为大型事务分配日志文件。
  5. 如果在阅读完所有内容后仍需要限制事务日志增长,则需要考虑批量更新大型结果集。这将允许您一次更新 1000 行,这意味着只有 1000 条记录写入日志。 SQL Server 使用write-ahead logging,所以为了完成一个事务,首先需要在事务日志中有足够的空间来写入所有的细节。如果使用简单的恢复模式,这种预写日志会自动截断,这意味着您不需要备份日志。因此,一次写入 1000 条记录(例如)比插入大量 1,000,000 条记录(比如说)造成的问题要少

Redgate 提供免费电子书,助您一臂之力!

编辑: 附:我刚刚阅读了您上面的评论...如果您处于完全恢复模式,则必须进行日志备份,否则 sql server 将不会从日志中恢复空间,并将继续写入日志,从而导致其扩展!但是请注意,您必须拥有完整备份才能使事务日志备份生效。如果日志没有初始还原点(即完整备份),则 SQL Server 无法备份日志。

【讨论】:

  • 经过这么多的研发,我认为将日志文件大小保持在限制范围内的最佳方法是在 10 t0 15 分钟后创建顺序备份。这样基本文件将始终低于其最大大小。也欢迎其他想法。
猜你喜欢
  • 1970-01-01
  • 2021-07-16
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多