【发布时间】:2017-09-27 10:28:48
【问题描述】:
我有一个相当大的数据库(最多有几百个分片的每日表,mdf 文件总共有 1.3TB)。
现在我们想尽最大努力阻止 mdf 进一步增长,我们会从现有表中删除尽可能多的不必要数据。
我们所知道的:
- 从表中删除数据不会减小 mdf 文件大小。
- 收缩文件/数据库是不可能的。
- 除非重建旧表,否则从旧表(例如 table_20161231)中删除不会为新表(例如 table_20170927)释放数据库空间。
所以我们知道表重建是必要的,改变索引似乎没有帮助,根据“exec sp_spaceused”的结果,空间仍然没有释放。
因此我们现在在下面做:
- 从 table_20161231 中删除,其中 data = 'unnecessary';
- select * into table_20161231_compact from table_20161231
- 删除表table_20161231
再次执行“exec sp_spaceused”似乎显示出积极的结果,因为新表有更多的“未分配空间”。
有人知道释放已删除数据空间的 1 行方法吗?
【问题讨论】:
-
>>>从旧表中删除(比如 table_20161231)不会为新表释放数据库空间
-
@sepupic,您问的问题似乎超出了我的知识范围,我只是从非常简单的表中进行非常简单的删除,我如何找出您需要知道的内容?
-
很简单。在 SSMS 中为您的表编写脚本,看看它是否有 CLUSTERED 索引。如果一个表没有 CLUSTERED 索引,那么它就是一个堆。请检查它,这很重要,因为如果不是在某些条件下,堆不会释放可用空间
-
@sepupic 我尝试编写 create table 语句的脚本,但上面没有聚集索引..
-
所以和我想的一样,是一堆。我将在稍后发布带有链接的答案并解释如何避免这种情况
标签: sql-server