我们需要每年一次从巨大的表中删除旧数据。该表的行非常紧凑(大约40个字节),并且表上只有一个聚集索引。
数据库总计约750 GB,正在处理的表的大小为640 GB,并且在清理之前包含87亿行。删除后,仅剩37亿行,数据大小降至500 GB。
这些数字看起来很奇怪,但是很好:每个页面都删除了一些行。有些页面已清空并丢弃,有些页面未更改,但仍然100%充满,但是现在大多数页面已被部分填充,并且每页上都有很多无人认领的空间。
要回收此空间,我需要重建索引。我的问题是:如何对数据库中与索引本身大小有关的索引进行碎片整理?
如果我没记错的话,INDEX DEFRAG REBUILD将需要的空余空间是其工作大小的1.3倍,因为它以排序方式复制了数据。数据库将增长近1 TB,一旦完成碎片整理,就不再需要这个新空间。
在进行碎片整理后缩回是没有用的,因为它会引入新的(大量)碎片。
我知道“ SORT_IN_TEMPDB”设置。使用此设置是否可以估计数据库中需要多少可用空间?
或者,我可以删除并重新创建聚簇索引,但是我不确定该操作的空间要求是什么。
重新组织索引不会回收每个页面(?)上的空间,因此该操作也不是我想要的。
感谢任何想法! 拉尔夫
答案 0 :(得分:-2)
我们需要每年一次从巨大的表中删除旧数据。
这恰好是分区的用例。每年进行分区,删除子表,完成。停机时间?如果您聪明地进行操作,则为毫秒。