Sql server 2008 在SQL 2008中启用页面压缩后如何回收空间?

Sql server 2008 在SQL 2008中启用页面压缩后如何回收空间?,sql-server-2008,compression,Sql Server 2008,Compression,我刚刚使用以下命令打开了表上的页面压缩(SQL 2008 Ent): ALTER TABLE [dbo].[Table1] REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE ) 硬盘现在比以前少了50GB的空间。我猜我需要运行一个命令来回收空间。有人知道吗?您是否使用sp_spaceused检查了表格大小 使用的磁盘空间不等于数据使用的空间。压缩将影响日志文件大小(必须记录所有日志文件),并需要一些可用工作空间(如经验法则,索引重建需

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

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

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

您是否使用sp_spaceused检查了表格大小

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

另一个选择是,您需要重建聚集索引,因为它是分段的。这会压缩数据,是回收文本列空间的唯一方法


关于数据压缩

即使问这个问题,我也会感到尴尬,但这是否可以通过缩小所讨论的数据库来解决?当它压缩页面时,可能会在整个文件中留下空闲的空间,而数据文件只需要压缩和收缩以回收空间

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


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

您可以发布架构和索引吗?这可能是我需要使用的命令。不幸的是,我得到了错误:“Msg 0,Level 11,State 0,Line 0当前命令出现严重错误。如果有结果,应该丢弃。”当我运行它时。哎哟,真难看。磁盘上是否有足够的可用空间容纳整个文件的第二个副本?如果有,那么您可以在当前组中创建第二个文件并将所有内容迁移到该文件,然后从组中删除当前的大文件。我很乐意提供一个脚本。SQL或应用程序日志中是否同时存在任何其他事件,这些事件可能会提供更多信息?我很感激,但我想通过缩小你的数据库来赢得它!