我有一个问题,我需要一些建议来克服。
我有一个已设置为Simple恢复模型的Server 2012数据库。有时,我的Server事务日志文件会失控,试图占用所有可用的磁盘空间。它在Server中显示为空,但继续占用磁盘空间(我理解原因)。我想知道是否有一种方法可以防止Server维护日志文件。
居住在此数据库前面的应用程序与使用trans备份进行恢复的想法不太一致。我们的备份策略是一个完整和不同的备份,定期执行足够的时间表,足以覆盖我们。我们不需要或不希望时间点恢复(因此简单恢复)。
为了进行测试,我将日志文件上限为10 on,并打开了10%的自动增长。当我启动一个完整的DB重新索引时,我的SQL Server负载大约是3.8mb trans (试图近似于我们的客户可能添加到数据库上的负载)。日志文件直接转到10mb+,所有事务都因'9002‘错误而停止。
我相信我理解在正常情况下转换日志的目标,但在我的例子中,它只是占用空间和阻碍。是否有办法防止Server使用它?
提前感谢您的洞察力!
Catt11。
发布于 2014-09-19 07:59:07
无法阻止Server写入事务日志。
在简单恢复模式中,一旦事务完成,它的日志记录就会被标记,以便它们可以被覆盖,但事务仍然被写入日志。
这意味着,如果日志的当前大小太小,则大型事务仍然可以展开日志。
您需要确保您的日志所在的驱动器有足够的空闲空间来扩展日志,或者(这是我建议的)手动展开日志文件的大小,以避免自动增长。不要定期收缩事务日志。
获得事务日志正确大小的最佳方法是模拟开发服务器上的生产流量。在一段时间内对开发数据库运行查询(将针对生产数据库执行),并监视日志。
发布于 2014-09-19 06:57:44
您可以通过运行命令来检查首先使用的日志空间的百分比
DBCC (LOGSPACE)
所使用的检查空间列的百分比似乎很高,在这种情况下,它将是您的数据库。
通过DBCC sHRINKFILE(dblogfilename,1)缩小日志文件
然后运行上面的命令,检查它减少了多少。
发布于 2014-09-19 08:30:51
我没有看到你问题的完整答案,所以我想补充一个答案。
我想知道是否有一种方法可以防止Server维护日志文件。
不,不可能以某种方式记录SQL server中的每个事务。日志记录取决于您使用的恢复模型。在简单的恢复模型中,只要事务日志备份语义不同,几乎就会记录足够多的信息。
为了进行测试,我将日志文件上限为10 on,并打开了10%的自动增长。
我认为这是罪魁祸首,尽管在简单恢复中长时间运行的事务仍然可以劫持日志,并且不允许它访问truncate.There --这是关于为什么事务日志文件增长并耗尽空间的一个很好的讨论,您必须看看这个。请将自动增长设置更改为MB。10 %的增长将允许SQL server在增长时捕获更多的空间,即使由于您有set.Take时间而需要的空间较少,并通过阅读这篇文章来了解自动增长并计算出适当的自动增长值。
https://dba.stackexchange.com/questions/77054
复制相似问题