SQL Server 2005:回收 LOB 空间

SQL Server 2005:回收 LOB 空间

我的一个数据库中有一张有趣的表,它令我感到困惑。

有问题的表有几个 LOB 类型的列(两个 nvarchar(max)和一个文本),并且看起来存在一些奇怪的空间问题。

来自此查询:

SELECT type_desc,
       SUM(total_pages) *8 [Size in kb]
FROM  sys.partitions p JOIN sys.allocation_units a
ON  p.partition_id = a.container_id
WHERE p.object_id = OBJECT_ID('asyncoperationbase')
GROUP BY type_desc; 

我得到:

type_desc           Size in kb
IN_ROW_DATA          27936
LOB_DATA             1198144
ROW_OVERFLOW_DATA   0

(表中有不到 8000 行,每行的数据长度约为 10k - 不包括 LOB 数据)

这里有点有趣:

SELECT ( SUM(DATALENGTH(aob.WorkflowState)) +
   SUM(DATALENGTH(aob.[Message]))+
   SUM(DATALENGTH(aob.[Data])) ) / 1024

来自 AsyncOperationBase aob

返回:

76617

当我读到它时 - 看起来~75mb 的 LOB 数据正在使用超过 1gb 的空间来存储 - 我预计会有一些开销,但不会那么多。

谢谢,

安德鲁

答案1

好的,我想我会更新一下,以防它能帮助到其他人。最后我与 MS 支持部门合作解决了这个问题,显然有一个后台工作线程负责释放空间。在这种情况下,它已经停止工作了。简单的解决方法是重新启动 SQL 服务器。

干杯

安德鲁

相关内容