我在生产数据库中有一个表,其大小为 525 GB,其中 383 GB 未使用:
我想回收其中的一些空间,但是,在弄乱生产数据库之前,我正在测试数据库中数据较少的相同表上测试一些策略。这个表有一个类似的问题:
关于表的一些信息:
服务器正在运行 SQL Server 2017 (RTM-GDR) (KB4505224) - 14.0.2027.2 (X64)。数据库正在使用SIMPLE
恢复模型。
我尝试过的一些事情:
ALTER INDEX ALL ON dbo.MyTable REBUILD
. 这产生了微不足道的影响。ALTER INDEX ALL ON dbo.MyTable REORGANIZE WITH(LOB_COMPACTION = ON)
. 这产生了微不足道的影响。将 LOB 列复制到另一个表,删除该列,重新创建该列,并将数据复制回来(如这篇文章所述:释放未使用的空间 SQL Server 表)。这减少了未使用的空间,但似乎只是将其转换为已用空间:
使用 bcp 实用程序导出表、截断它并重新加载它(如这篇文章所述:如何为表释放未使用的空间)。这也减少了未使用的空间并增加了与上图类似的程度。
DBCC CLEANTABLE('myDB', 'dbo.myTable')
没什么区别