如何在SQL 2008中打开页面压缩后回收空间?

时间:2009-06-04 00:35:46

标签: sql-server-2008 compression

我刚刚使用以下命令在表(SQL 2008 Ent)上打开了页面压缩:

ALTER TABLE [dbo].[Table1] REBUILD PARTITION = ALL
WITH 
(DATA_COMPRESSION = PAGE
)

硬盘驱动器现在包含比以前少50GB的 空间。我猜我需要运行一个命令来收回空间。有人知道吗?

2 个答案:

答案 0 :(得分:1)

您是否使用sp_spaceused?

使用大小进行了检查

使用的磁盘空间不等于数据使用的空间。压缩将影响日志文件大小(所有必须记录)并需要一些免费工作空间(如经验法则,索引重建需要空闲空间= 1.2倍最大表空间)。

另一种选择是您需要重建聚簇索引,因为它是碎片化的。这会压缩数据,是回收文本列空间的唯一方法。

关于数据压缩的

Also, read Linchi Shea's articles

答案 1 :(得分:1)

我甚至在问这个问题时感到尴尬,但这是否可以通过缩小相关数据库来修复?当它压缩页面时,也许它会在整个文件中保留所有空间,并且数据文件只需要缩小和缩小以回收空间......

如果它创建了表的新压缩副本,然后从文件中删除了旧副本,但没有在内部收缩文件,这也可能解释了驱动器上突然缺少空间。

如果是这种情况,那么一个简单的“ DBCC SHRINKDATABASE('my_database')”应该可以解决问题。注意:这可能需要很长时间,并在此期间锁定数据库以防止访问,因此请明智地安排它。