我有一个非常大的数据库,大部分空间是索引大小。我将几个索引移动到一个不同的文件组(只是为了试验),但是无论我做什么,我都不能减少MDF的大小。
我尝试过收缩数据库,收缩文件,重建聚集索引。我可以做什么来回收MDF中的空间?我已经将价值25 of的索引移到了不同的文件组。有没有可能将我的mdf减少同样的25 or(或接近它)?
SQL Server 2008企业版
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)没有尝试‘空文件’选项,因为这似乎不是我想要的。
发布于 2011-03-16 02:13:47
好的,尝试通过UI“收缩数据库”与"0%“的最大可用空间。
你之前使用的10%的设置“起作用了”,但你的27 DB可用空间还不到你总数据库的10% (大约7%)。
请记住,这可能会导致性能问题,因为您的数据库将需要再次增长,这也会导致性能问题,因为收缩会导致碎片,这是不好的。
但是,如果空间是您主要关心的问题,那么上面的方法应该可以使用。
发布于 2011-03-16 07:09:22
我在过去注意到,将数据文件分成较小的块进行收缩可能比试图一次性收缩所有数据文件更有效。如果您要尝试使用类似的策略,则需要执行以下操作:
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 发布于 2011-03-16 02:20:53
这一步看起来是错误的
UI:收缩文件:(类型=数据,组=主要,文件名=数据库名称)
1.释放未使用的空间
2.重新组织页面...设置收缩文件=2 2GB (允许的最大值)
3.重新组织页面...设置收缩文件= 361,360 (允许最小值)
在你的问题步骤中,这是正确的。
“收缩文件”是以MB为单位输入的,因此值361,360将是三分之一MB。将其设置为最小值的最简单方法是输入0,按tab键将其替换为允许的最小值->。
现在,我们需要将大小降至便于管理的备份大小
这完全是错误的做法。BACKUPs 不包含可用空间,因此,无论您的主mdf文件是否具有100 is或1 1TB的可用空间,只要数据驻留在200 is上,这就是备份文件的大小。对于SQL Server2008,您可以使用"with compression",它的平均大小约为1/6。
https://stackoverflow.com/questions/5315020
复制相似问题