回收具有单个按时间顺序排列的分区的文件组中的可用空间

回收具有单个按时间顺序排列的分区的文件组中的可用空间

-从这里移至所以(暂无评论)

问题:

什么是回收大型(数百 GB)文件组中空间的正确方法,其中表的单个分区按时间顺序排列,没有索引碎片,并且不能承受索引碎片?我听到很多关于收缩的坏消息(例如http://www.brentozar.com/archive/2009/08/stop-shrinking-your-database-files-seriously-now/)索引碎片和重建的时间复杂性是我主要关心的问题

背景:

我有一张很大的桌子(几个 TB),它有以下属性:

  • 数据仅按时间顺序存储(‘C’ 列)
  • 索引基于维度“A”,然后基于列“C”
  • 表根据“A”进行分区,每个分区都有自己的文件组(文件增长率为 10%)

因此,数据仅附加到每个分区,并且存储工作非常快。

我们希望根据时间开始分区(例如,按季度和维度“A”进行分区;同样,每个分区位于单独的文件组中)。但有两个问题:

  • 我们不能浪费磁盘空间(例如,每个历史分区中都有 10% 的可用空间,这些空间永远不会再被触及)。
  • 我们绝对不能承受任何索引碎片(因为对于这种数量的数据,我们的查询将受到极大影响)。

如果能够在每个季度结束后从文件组末尾剪切出可用空间,然后将文件组标记为只读,那就太好了

答案1

要回收分区末尾的可用空间:

DBCC SHRINKFILE (FileGroupFileName, TRUNCATEONLY)
GO

将分区标记为只读:

ALTER DATABASE [DBNAME]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;

ALTER DATABASE [DBNAME] MODIFY FILEGROUP [FileGroupName] READ_ONLY;
GO

ALTER DATABASE [DBNAME]
SET MULTI_USER;
GO

相关内容