我的一个数据库中有一张有趣的表,它令我感到困惑。
有问题的表有几个 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 服务器。
干杯
安德鲁