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

时间:2011-03-15 16:47:18

标签: sql-server sql-server-2008

我有一个非常大的数据库,大部分空间是索引大小。我将几个索引移动到另一个文件组(仅用于实验),但无论我做什么,我都无法减小MDF的大小。

我尝试过收缩数据库,缩小文件,重建聚簇索引。我可以做些什么来回收MDF中的那个空间?我已将25GB的索引移动到另一个文件组。甚至可以用相同的25gb(或接近它)减少我的mdf?

SQL Server 2008 Enterprise

Group   Total Space     Avail Space
PRIMARY 388485.000000   27126.3125000
Index   24778.375000    26.6250000

我试图收缩的选项:

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)

没有尝试'空文件'选项,因为这看起来不像我想要的。

4 个答案:

答案 0 :(得分:1)

好的,在UI中尝试“收缩数据库”,最大可用空间为“0%”。

您在“工作”之前使用的10%设置,但您的27个演出可用空间低于您的总数据库的10%(相当于7%)。

请记住,这可能会导致您的性能问题,因为您的数据库需要再次增长,这也会导致性能问题,因为缩小会导致碎片化,这很糟糕。

但是,如果空间是您最关心的问题,则上述方法工作。

答案 1 :(得分:1)

此步骤看起来不对

  

UI:缩小文件:( type = data,group = primary,filename = db name)
      1.释放未使用的空间
      2.重新组织页面...设置缩小文件= 2GB(最大允许)
      3.重新组织页面...设置缩小文件= 361,360 (允许的最小值)

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

  1. 收缩档案
  2. 文件类型(数据),组(PRIMARY)名称()
  3. 收缩动作=重新组织页面(=移至前方),收缩文件*
  4. 收缩文件以MB输入,因此值361,360将是太字节的三分之一。将其设置为最小的最简单方法是输入0,tab out - >它将取代允许的最小值。

      

    现在我们需要将大小缩小到可管理的备份

    这完全是错误的做法。 BACKUP 包含可用空间,因此只要数据位于200GB(即备份文件的大小),主mdf文件是否具有100GB的可用空间或1TB。对于SQL Server 2008,您可以使用“with compression”,它的平均大小约为1/6。

答案 2 :(得分:1)

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

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  

答案 3 :(得分:0)

有时我注意到如果我缩小文件,它将不会缩小到低于文件上设置的初始大小。你能看看文件的初始文件大小是什么吗?