【发布时间】:2012-12-26 08:55:24
【问题描述】:
环境:SQL Server 2008 spk1 企业版。
我有一个存储varbinary 和blob 数据的大表。如果我在 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 级的浪费空间。
【问题讨论】:
-
你能从 dm_db_index_physical_stats 中选择与空间相关的列并显示它们吗?我想查看以页而不是行为单位测量的数字。另外,请运行
DETAILED扫描并发布碎片编号(碎片,avg_fragment_size)。 -
这对于数据库管理员论坛来说可能是一个更好的问题。 dba.stackexchange.com
标签: sql sql-server blob space