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