SQL 2008 blob数据未使用的空间无法释放

时间:2013-01-11 17:51:06

标签: sql sql-server blob space

环境:SQL Server 2008 spk1企业版。

我有一个存储varbinaryblob数据的大表。如果我在SSMS中运行磁盘使用情况报告,我们会看到数据库中大约三分之一的空间(此应用程序有数百个)显示为“未使用的空间”(我不是指未分配的空间)。

我遇到了互联网上人们无法解决的一些解决方案。

  • dbcc cleantable
  • 删除聚集索引并重建它
  • 重建所有索引

如果我select * into另一个表,它会重建表格,而不会产生额外的损失。

如果我跑:

SELECT alloc_unit_type_desc, avg_page_space_used_in_percent, record_count,
ghost_record_count FROM sys.dm_db_index_physical_stats
(DB_ID(N'Test_dbname'), OBJECT_ID(N'table_name'), NULL, NULL , 'DETAILED');

我收到:

alloc_unit_type_desc avg_page_space_used_in_percent record_count ghost_record_count
IN_ROW_DATA          66.7239065974796               12404285     0
IN_ROW_DATA          0.850741289844334              333460       0
IN_ROW_DATA          44.903076352854                80002        0
IN_ROW_DATA          78.5273041759328               374          0
LOB_DATA             64.0441438102298               62248788     0

我相信这表明分配了大量空间。问题是为什么我不能减少这个空间?在数百个数据库的过程中,我们谈论的是数TB的浪费空间。

1 个答案:

答案 0 :(得分:0)

将其视为文件系统。选择另一个表将所使用的数据写入mdb中的连续块。然后你在这里和那里改变一些blob,DBMS非常明智地希望保持每个blob连续....

所以,即使有一个命令来平衡表格,它基本上会做你现在正在做的事情,其他任何东西都会要求它。

真正的答案是不要使用RDBMS来存储这类数据。