您有充分的理由要担心,因为SQL Server中的DB经常“吮吸”。SQL 2005存储引擎负责人Paul Randal表示,ShrinkDB的编写非常糟糕。它会通过在最末端获取数据并将其放在最开始来查找空白空间,并继续这样做,直到在DB文件的“末端”具有可用空间为止。此时,它可以从SQL Server释放空间并将其分配回OS。您正在有效地反转数据库文件,因此通常会看到大量碎片。您可以在此博客文章或此MCM Internals视频上了解他的观点。
与所有内容一样,您实际上必须首先在您的环境中对其进行测试。更好的方法是将数据移动到另一个文件组。您可以使用聚簇索引进行联机索引重建,然后在新文件组中重建索引。然后,您可以删除旧的并释放空间,几乎没有碎片。请注意,这会占用大约120%的额外空间。这样做的问题是,您甚至需要额外的可用空间,看起来好像没有。这是企业功能。
如果可用空间非常重要,那么您可能不得不硬着头皮,一次将DB慢慢缩小一小块,以避免长时间运行的进程。请注意,您的数据将非常分散,您将需要重新为所有内容重新编制索引。请注意,在对所有内容重新编制索引之后,您将稍微增加使用的空间并返回到具有额外的可用空间。请参阅此处的 Brent建议。
至于有多少可用空间对您有好处,这取决于您可以负担多少碎片和文件增长活动。启用IFI后,文件增长几乎是即时的,但仍然会产生碎片。一个好的经验法则是根据需要预分配尽可能多的空间,或者监视增长并根据需要定期进行调整。这样可以减少物理碎片。
另外,日志文件的增长更为重要。其他日志文件可能会导致VLF碎片化。这会使您的还原速度变慢,并可能影响检查点/截断。 使用零散的日志会带来一些性能风险。DBCC LOGINFO();
在每个数据库上执行一个。尝试将每个Kim Tripp的数量保持在50欧元左右,但是如果看到数百个,就会出现碎片问题,这意味着必须增加日志文件才能支持操作。查看每个Paul Randal日志文件的好方法是让它增长一周并重新索引。那可能是个好主意,也许您可以在上面留下更多的可用空间,以防万一。确保您的日志没有被DBCC LOGINFO()分割;再一次,如果他们是,这意味着他们成长了很多。使用以下命令缩小并重新扩展日志文件这种方法。