我想知道增长文件的内部方法是否使用
ALTER DATABASE testdb
MODIFY FILE
(
NAME = testdb_Log
, SIZE = 40960MB --40 GB
)
工作方式不同然后让文件随着时间的推移自动增长到相同的大小?
我的问题的背景: 我面临非常高(> 10K)的 VLF 依赖于不同实时数据库的几个日志文件,这些文件具有完全恢复,大小约为 100 GB。
在测试解决此问题的策略时,我将日志文件的大小调整为 16 MB,具有 4 个 VLF,然后让它增长到 40960 MB,然后将 AUTOGROW 设置为 100 MB。之后,我的文件中有 20 个 VLF。
我的期望是看到更多
(40960 MB - 16 MB) / 100 MB *(每个自动增长 8 个 VLF)= 文件中的 3276 个 VLF。
相反,我现在只有 20 个。为什么?
我的问题的第二部分:到目前为止,我了解到不适当的 AUTOGROW 设置会导致高 VLF 计数,这在我们的数据库中肯定是这种情况,在很长一段时间内都没有关注此设置。所有解释如何处理这种情况的文章都建议为 AUTOGROW 选择一个合适的值。但是如果我假设手动增长过程(本文的第一部分)甚至不使用自动增长设置是正确的,并且我以这种方式将日志文件增长到不需要任何自动增长的适当大小,那么自动增长之后设置就没那么重要了吗?
我的问题的第三部分?40GB 日志文件上的 VLF 计数 20 现在是否太低了?这是我读到我们应该以增量方式再次备份文件的原因吗?对于 40 G 或 80 G 的日志文件,多少 VLF 计数可能是一个好的(性能)数字?
甚低频计算
对于事务日志文件的手动或自动增长,VLF 的数量没有区别。
SQL Server < 2014
在 SQL Server 2014 版本之前,当您创建、增长或自动增长 TLog 文件时,VLF 数量的算法如下:
SQL Server 2014 及更高版本
从 SQL Server 2014 开始,算法如下:
您对 VLF 数量的计算应该是正确的。
您的数据库是否设置为 AUTOSHRINK?您是否正在执行任何其他可能调整 TLOG 大小的维护任务?
自动增长:是还是不是?
如果您手动增加 TLog 文件,那么您确实可以关闭自动增长设置。但请注意:如果您不可用并且数据库必须增长,会发生什么情况?数据库将停止并显示一条错误消息。
基线大小
在某个时间点,您的数据库的 TLog 大小将有足够的空间用于发生的一般导入和日常工作负载以及发生的 TLog/Diff/Full 备份。
从头开始创建新的 TLog 时,使用此基线大小作为起点。如果数据库的 TLog 真的很大,那么创建一个基本大小为 8 GB 的 TLog,然后以 8 GB 的步长手动增长,直到达到“基线”大小。
然后在磁盘上保留一些额外的空间,以允许一两个 8GB 大小的“自动增长”。
根据事务日志 VLF——太多还是太少?一文,这将为您提供最佳设置。他们建议 VLF 的大小为 512 MB。
磁盘空间
如果您没有无限的磁盘空间,请确保 TLog 文件设置了最大大小,这不会将您的磁盘填满。
监控
最重要的一点是要有一个监视工具来监视数据库的“可用空间”,因为您永远不知道流氓进程是否会做您没有预料到的事情。
事务日志物理架构
TechNet 上有一篇很好的文章解释了事务日志的物理体系结构。这使您对 TLog 滚动的原因或它可能必须增长的原因有了一些了解。
参考
SQL Server 2014 中 VLF 创建算法的重要变化
初始 VLF 序列号和默认日志文件大小
事务日志 VLF——太多还是太少?
事务日志物理架构