我有一个 SQL Server 数据库的奇怪情况,表中的实际数据大约是320 MiB。这是通过对DATALENGTH
所有列求和来确定的。这将忽略碎片、索引空间和其他 SQL Server 内部开销。但问题是该表的大小大约为40 GiB,并且它以惊人的速度增长,与插入的字节或行中的数据量非常不成比例。
我使用该sys.dm_db_index_physical_stats
功能查看物理数据,大约 40 GiB 的数据被捆绑在LOB_DATA
.
构成表格内容的 320 MiB 中的大部分都是ntext
. 现在,我的问题是 SQL Server 为何LOB_DATA
在只有大约 310 MiBntext
数据的情况下分配了 40 GiB。
如果我们将列转换为 ,问题会消失nvarchar(max)
吗?ntext
是否有任何存储引擎细节LOB_DATA
导致LOB_DATA
页面不被回收?为什么它在改变的数量方面以如此不成比例的速度抱怨?