Will Asked: 2009-08-06 08:15:02 +0800 CST2009-08-06 08:15:02 +0800 CST 2009-08-06 08:15:02 +0800 CST SQL 数据库上的事务日志填充设置为简单 772 我们在设置为简单事务模式的 SQL 2005 服务器上有一个数据库。日志记录设置为 1 MB,并在需要时设置为增长 10%。 我们一直遇到事务日志填满的问题,我们需要缩小它。当允许事务日志设置为简单且不受限制的增长时,什么会导致事务日志填满? sql-server sql-server-2005 3 个回答 Voted Paul Randal 2009-08-06T09:21:01+08:002009-08-06T09:21:01+08:00 即使在简单恢复模型中,也有一些因素可能导致日志必须增长: 长时间运行的事务 - 在事务提交或回滚之前无法清除日志。您可以使用DBCC OPENTRAN向您显示最旧的活动事务。 事务复制 - 在日志读取器作业读取提交的事务之前无法清除日志 SQL 2000 SP4 中还有一个错误会阻止检查点正确清除日志 - 请参阅我的博客文章了解更多详细信息:为什么我的日志在简单恢复模式下无法清除?SQL 2000 错误或非常大的 VLF。 我的猜测是你有一个长期运行的交易。 您不需要不断缩小日志 - 不断缩小和增长日志会导致称为 VLF 碎片的事情,这会影响性能。此外,每当日志增长时,它必须进行零初始化,这会导致在初始化发生时一切都在等待。让日志达到稳态大小并离开 查看我为 TechNet 杂志撰写的关于了解日志及其在各种恢复模型中的行为的长文:了解 SQL Server 中的日志记录和恢复。 希望这可以帮助! Paris 2011-11-09T14:46:25+08:002011-11-09T14:46:25+08:00 我意识到这是一篇旧帖子,但我只是在试图找出更多关于这个完全相同的问题时发现了这个,这仍然是同类中最好的讨论。它对我帮助很大。 根据 Paul Randal 的说法,日志文件实际上由每个 512KB 的虚拟日志文件组成。另一方面,Robert 说 5MB 的初始日志大小可以正常工作,增量为 10%。所以这让我做了一些简单的数学运算。 5MB = 5120KB。从 5120KB 增长 10% 正好是 512KB,或 1 个 VLF 的大小!Will 的日志文件只有 1MB(在我的例子中是 2MB),10% 的增长导致尝试增长 102.4KB(或者对我来说是 204.8KB),这甚至比 1 个虚拟日志文件还小!我相信这就是日志无法增长的原因!Robert 增加日志初始大小的解决方案有助于启动增量。另一个解决方案(未经测试,但我敢打赌)是让 Will 将增量增加到 50%,或者对我来说增加到 25%。当然,我不建议这样做,因为即使第一次仅意味着 512KB 的增长,以后也可能会导致一些巨大的增长。另一种选择是将增长设置为 1MB 增量。鉴于我们预计小原木增长缓慢,这可能是一个很好的解决方案。自然,如果预期的增长要大得多,那么如此小的增长意味着日志文件需要经常增长,这会影响性能。无论哪种方式,这些解决方案中的任何一个都应该可以很好地避免 9001/9002 错误与无限制增长,在具有大量可用 HDD 空间的服务器上。 Robert 2010-06-04T07:09:21+08:002010-06-04T07:09:21+08:00 我在 SQL 2005 中遇到了同样的问题,日志文件设置为无限制增长,但它没有增长,当它填满时出现 9001 错误。我的解决方案是将初始日志大小设置为 5 mb,似乎已经解决了这个问题。
即使在简单恢复模型中,也有一些因素可能导致日志必须增长:
SQL 2000 SP4 中还有一个错误会阻止检查点正确清除日志 - 请参阅我的博客文章了解更多详细信息:为什么我的日志在简单恢复模式下无法清除?SQL 2000 错误或非常大的 VLF。
我的猜测是你有一个长期运行的交易。
您不需要不断缩小日志 - 不断缩小和增长日志会导致称为 VLF 碎片的事情,这会影响性能。此外,每当日志增长时,它必须进行零初始化,这会导致在初始化发生时一切都在等待。让日志达到稳态大小并离开
查看我为 TechNet 杂志撰写的关于了解日志及其在各种恢复模型中的行为的长文:了解 SQL Server 中的日志记录和恢复。
希望这可以帮助!
我意识到这是一篇旧帖子,但我只是在试图找出更多关于这个完全相同的问题时发现了这个,这仍然是同类中最好的讨论。它对我帮助很大。
根据 Paul Randal 的说法,日志文件实际上由每个 512KB 的虚拟日志文件组成。另一方面,Robert 说 5MB 的初始日志大小可以正常工作,增量为 10%。所以这让我做了一些简单的数学运算。
5MB = 5120KB。从 5120KB 增长 10% 正好是 512KB,或 1 个 VLF 的大小!Will 的日志文件只有 1MB(在我的例子中是 2MB),10% 的增长导致尝试增长 102.4KB(或者对我来说是 204.8KB),这甚至比 1 个虚拟日志文件还小!我相信这就是日志无法增长的原因!Robert 增加日志初始大小的解决方案有助于启动增量。另一个解决方案(未经测试,但我敢打赌)是让 Will 将增量增加到 50%,或者对我来说增加到 25%。当然,我不建议这样做,因为即使第一次仅意味着 512KB 的增长,以后也可能会导致一些巨大的增长。另一种选择是将增长设置为 1MB 增量。鉴于我们预计小原木增长缓慢,这可能是一个很好的解决方案。自然,如果预期的增长要大得多,那么如此小的增长意味着日志文件需要经常增长,这会影响性能。无论哪种方式,这些解决方案中的任何一个都应该可以很好地避免 9001/9002 错误与无限制增长,在具有大量可用 HDD 空间的服务器上。
我在 SQL 2005 中遇到了同样的问题,日志文件设置为无限制增长,但它没有增长,当它填满时出现 9001 错误。我的解决方案是将初始日志大小设置为 5 mb,似乎已经解决了这个问题。