我有一个很大的只读数据库,有30张表.DB的总规模约为13 TB,最大的表约为4.5TB。(大约有10个大小为1TB+的表,然后是几个较小的表。)目前,DB被分成8个数据文件,全部位于主文件组中。
我已经在一些大型表上应用了页面级数据压缩,这使得DB的大小减少到了大约10 DB,但是,我真的很想收回磁盘上的一些空间。(这个数据集是只读的--它永远不会增长。)
我意识到缩小文件会导致大量的碎片,这可以通过重建所有的索引来修复,但是重新构建索引可能会导致文件在整个again...argh上增长!
这就引出了我关于如何在压缩后回收磁盘空间的问题:
这似乎是一项需要很长时间的大任务,因为我将不得不基本上重新创建我的整个database...again。有更简单的解决办法吗?
发布于 2017-02-13 17:14:44
这篇白皮书涵盖了所有的内容:数据压缩:策略、容量规划和最佳做法
在数据压缩完成后,所节省的空间被释放到相应的数据文件中。但是,没有将空间释放到文件系统,因为作为数据压缩的一部分,文件大小不会自动减小。
有几个选项可以通过缩小文件的大小将空间释放到文件系统:
DBCC SHRINKFILE (或) DBCC SHRINKDATABASE :
在DBCC shrink文件之后,碎片将increase.use ALTER INDEX … REORGANIZE而不是重新构建。
还要注意,DBCC SHRINKFILE是单线程的,可能需要很长时间才能完成。
如果正在压缩文件组中的所有表::
IN_ROW_DATA和ROW_OVERFLOW_DATA分配单元)。因此,旧文件组不会完全为空,因此不能删除。还有一个选择:
如果要压缩文件组中的所有表,还有另一种解决方案。在新文件组中创建一个空表,压缩它,然后使用INSERT…将数据复制到新表中选择。
https://stackoverflow.com/questions/42209394
复制相似问题