首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将索引移动到文件组后回收空间

将索引移动到文件组后回收空间
EN

Stack Overflow用户
提问于 2011-03-16 00:47:18
回答 4查看 3.7K关注 0票数 0

我有一个非常大的数据库,大部分空间是索引大小。我将几个索引移动到一个不同的文件组(只是为了试验),但是无论我做什么,我都不能减少MDF的大小。

我尝试过收缩数据库,收缩文件,重建聚集索引。我可以做什么来回收MDF中的空间?我已经将价值25 of的索引移到了不同的文件组。有没有可能将我的mdf减少同样的25 or(或接近它)?

SQL Server 2008企业版

代码语言:javascript
复制
Group   Total Space     Avail Space
PRIMARY 388485.000000   27126.3125000
Index   24778.375000    26.6250000

我尝试过的收缩选项:

代码语言:javascript
复制
TSQL: 
1. DBCC SHRINKFILE (1, 10);
2. DBCC SHRINKFILE (1, TRUNCATE_ONLY);

UI: Shrink database: 
1. Without 'reorganize files...'
2. With 'reorganize files...'
2a. set max free space = 10%
2b. set max free space = 90%
2c. set max free space = 75%

UI: Shrink files: (type =data, group = primary, filename = db name)
1. Release unused space
2. reorganize pages... setting shrink file = 2GB (max it allows)
3. reorganize pages... setting shrink file = 361,360 (min allowed)

没有尝试‘空文件’选项,因为这似乎不是我想要的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-16 02:13:47

好的,尝试通过UI“收缩数据库”与"0%“的最大可用空间。

你之前使用的10%的设置“起作用了”,但你的27 DB可用空间还不到你总数据库的10% (大约7%)。

请记住,这可能会导致性能问题,因为您的数据库将需要再次增长,这也会导致性能问题,因为收缩会导致碎片,这是不好的。

但是,如果空间是您主要关心的问题,那么上面的方法应该可以使用

票数 1
EN

Stack Overflow用户

发布于 2011-03-16 07:09:22

我在过去注意到,将数据文件分成较小的块进行收缩可能比试图一次性收缩所有数据文件更有效。如果您要尝试使用类似的策略,则需要执行以下操作:

代码语言:javascript
复制
DECLARE @targetSize AS INT = 388000;
DECLARE @desiredFinalSize AS INT = 362000;
DECLARE @increment AS INT = 300;
DECLARE @sql AS VARCHAR(200);

WHILE @targetSize > @desiredFinalSize
BEGIN
    SET @sql = 'DBCC SHRINKFILE(''MyDataFileName'', ' + CAST(@targetSize AS VARCHAR(10)) + ');'
    SELECT @sql;
    EXEC(@sql);

    SET @targetSize = @targetSize - @increment; 
END  
票数 2
EN

Stack Overflow用户

发布于 2011-03-16 02:20:53

这一步看起来是错误的

UI:收缩文件:(类型=数据,组=主要,文件名=数据库名称)

1.释放未使用的空间

2.重新组织页面...设置收缩文件=2 2GB (允许的最大值)

3.重新组织页面...设置收缩文件= 361,360 (允许最小值)

在你的问题步骤中,这是正确的。

  1. 收缩文件
  2. 文件类型(数据),组(主要)名称()
  3. 收缩操作=重新组织页面(=移到前面),收缩文件*

“收缩文件”是以MB为单位输入的,因此值361,360将是三分之一MB。将其设置为最小值的最简单方法是输入0,按tab键将其替换为允许的最小值->。

现在,我们需要将大小降至便于管理的备份大小

这完全是错误的做法。BACKUPs 不包含可用空间,因此,无论您的主mdf文件是否具有100 is或1 1TB的可用空间,只要数据驻留在200 is上,这就是备份文件的大小。对于SQL Server2008,您可以使用"with compression",它的平均大小约为1/6。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5315020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档