在 SQL Server 2008 中管理日志文件

在 SQL Server 2008 中管理日志文件

这些是我当前的设置:

恢复模式:简单日志文件初始大小:10 mb日志文件自动增长:无数据库自动收缩:关闭

日志文件自动增长设置为 None,因为我不希望日志文件增长。我的目标是让日志文件始终保持较小,因为我不需要它用于恢复目的。

这两种设置都可以吗?

另外,如果我有一个涉及大量插入和删除的大型事务(超过 10 MB 的更改),会发生什么情况。操作是否会因为日志文件空间不足而无法完成?

答案1

  • 在某些恢复模型中,每次提交时如果没有打开事务,日志内容就会被丢弃。这种情况经常发生。

  • 如果日志过载,数据库将无法提交。更改将被回滚。请注意,在简单模型中这种情况很少见,但理论上是可能的。不过,我认为这只是理论上的。

  • 同时,不能使用日志备份来进行时间点恢复。

答案2

只是为了澄清一下:

在简单恢复模型中,日志文件截断与提交不直接相关。日志文件被截断,使得虚拟日志文件可重新用于其他事务仅有的当发生检查点时。检查点的执行频率与 SQL 认为将脏页写入磁盘所需的频率相同。此外,在检查点日志文件的非活动部分(未被任何事务使用)被截断,使得事务日志可供其他事务重复使用。日志被截断后,日志文件可以收缩,以减少物理大小(如果需要)。

因此,如果您在提交后未在事务中明确指定检查点,则提交不会生成检查点。另一方面,如果日志包含有关未提交事务的信息,则实际生成日志截断的检查点将不会产生任何影响。

回答您的问题:

  • 如果将插入和删除视为批量操作或在事务结束时提交一次,那么是的……日志文件将填充所需的内容,并声称所有空间都可用。我建议启用日志文件的自动增长选项。您可以指定一个限制,但将日志文件限制为 1000 MB 是相当危险的。

有关日志文件管理的更多信息:http://technet.microsoft.com/en-us/library/ms189085.aspx

答案3

是的,如果由于较大的事务导致日志填满,并且日志文件设置为不自动增长,则事务将失败并回滚。

这可能并不像您想象的那么罕见。索引重建是一种常见的维护活动,会占用大量日志空间。

您没有提到数据文件的大小,或者数据库处理的活动类型,所以我不知道 10MB 是否足够大。

我会绝不留下一个禁用自动增长的日志文件。这只会自找麻烦。当然,您希望收到通知什么时候它会增长,你可以制作一个监视器来实现这一点。你只是不想半夜看到某个页面,因为某个用户运行了一个大报告或类似的东西。

答案4

如果这是您的生产数据库,那么采用简单恢复模型并不是一个好主意。除非您用尽磁盘空间,否则自动增长应该会对您有所帮助。

相关内容