我刚刚使用以下命令在表(SQL 2008 Ent)上打开了页面压缩:
ALTER TABLE [dbo].[Table1] REBUILD PARTITION = ALL
WITH
(DATA_COMPRESSION = PAGE
)
硬盘驱动器现在包含比以前少50GB的 空间。我猜我需要运行一个命令来收回空间。有人知道吗?
答案 0 :(得分:1)
您是否使用sp_spaceused?
使用表大小进行了检查使用的磁盘空间不等于数据使用的空间。压缩将影响日志文件大小(所有必须记录)并需要一些免费工作空间(如经验法则,索引重建需要空闲空间= 1.2倍最大表空间)。
另一种选择是您需要重建聚簇索引,因为它是碎片化的。这会压缩数据,是回收文本列空间的唯一方法。
关于数据压缩的答案 1 :(得分:1)
我甚至在问这个问题时感到尴尬,但这是否可以通过缩小相关数据库来修复?当它压缩页面时,也许它会在整个文件中保留所有空间,并且数据文件只需要缩小和缩小以回收空间......
如果它创建了表的新压缩副本,然后从文件中删除了旧副本,但没有在内部收缩文件,这也可能解释了驱动器上突然缺少空间。
如果是这种情况,那么一个简单的“ DBCC SHRINKDATABASE('my_database')”应该可以解决问题。注意:这可能需要很长时间,并在此期间锁定数据库以防止访问,因此请明智地安排它。