Sql server 尽管使用了稀疏列,但仍需要Traceflag 647

Sql server 尽管使用了稀疏列,但仍需要Traceflag 647,sql-server,sparse-matrix,sql-server-2016,Sql Server,Sparse Matrix,Sql Server 2016,我使用的是SQL Server 2016 SP1,并且有一个包含稀疏列的表的数据库。 大约有1500个稀疏列和大约10个非稀疏列。这些稀疏列中的大多数是nvarchar(1000) 我注意到,突然之间,向这个表中添加新的稀疏列需要很长时间。SP_whoisactive表示读取次数较多,而SP_lock表示正在sys.sysrscols上取出独占密钥锁 我发现这表明,一旦一个表的行大小接近行大小的最大值,当添加一个新列时,将对该表进行完整扫描,以确保添加一个新列不会违反数据完整性 提供了向后兼容性

我使用的是SQL Server 2016 SP1,并且有一个包含稀疏列的表的数据库。 大约有1500个稀疏列和大约10个非稀疏列。这些稀疏列中的大多数是nvarchar(1000)

我注意到,突然之间,向这个表中添加新的稀疏列需要很长时间。SP_whoisactive表示读取次数较多,而SP_lock表示正在sys.sysrscols上取出独占密钥锁

我发现这表明,一旦一个表的行大小接近行大小的最大值,当添加一个新列时,将对该表进行完整扫描,以确保添加一个新列不会违反数据完整性

提供了向后兼容性traceflag来覆盖SQL Server 2012中引入的此行为,并应用该traceflag修复了该问题。但是,我觉得我不需要将这个traceflag应用到该实例,因为在页面的下一步,Microsoft声明

当应用程序频繁地向表中添加新列时,可以考虑添加可变长度列或稀疏列。即使所有列的总大小超过8060字节,它也只是元数据操作。 DBCC ShowContig表示最大行大小为2736,因此我不认为我应该得到这个问题,尽管使用了稀疏列

有人见过这个吗?我可以提供一个表的定义,如果需要的话,但它显然是相当大的

非常感谢