Sql Server设置最大文件大小会导致错误的事务

时间:2018-02-22 13:51:18

标签: sql-server

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

如果我取消选中日志文件的Autogrowth,则会出现同样的情况。

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

我无法理解为什么Sql server没有维护最大文件大小限制。为什么它不能删除旧日志或类似的东西来维护最大文件大小。 它是如何运作的。

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

1 个答案:

答案 0 :(得分:1)

这里需要考虑一些事项,特别是如果您想将日志文件大小限制为1GB。

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

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