症状
假设你在 Microsoft SQL Server 中有一个具有聚集列存储索引(CCI)的分区表。 在动态管理视图(DMV)上运行 SELECT 语句时sys.dm_db_index_physical_stats 根据此表,你可能会收到一条错误消息,类似于分区切换后的索引分配映射(IAM)页上的以下内容:
错误消息8959,级别16,状态1,行 LineNumber
表错误1:361: 用于对象 id objectid、索引 id IndexID、分区 id PartitionID、分配单元 id UnitID (类型行内数据)的 iam 链中链接的对象 id objectid,索引 id IndexID,分区 id PartitionID,分配单元 id UnitID (按行数据),按 page (0:0)。
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。
解决方案
在 SQL Server 的以下累积更新中修复了此问题:
关于 SQL Server 的累积更新:
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
更多信息
问题的原因是当你执行 列存储表的分区开关以及任何逻辑删除 deltastore 存在于源分区中,此逻辑删除将不会切换到目标分区 导致 IAM 页面不匹配错误的分区。 您可以运行 "sys.dm_db_column_store_row_group_physical_stats" 若要了解详细的行组状态(包括逻辑删除) 列存储索引。
解决方法
当后台时,该问题将在一段时间后消失 元组移动器破坏了逻辑删除 deltastore。
若要解决此问题,您可以删除该 逻辑删除 deltastore 通过运行 "ALTER INDEX ..." 立即避免出现错误。重新组织"一次或多次。
参考
了解Microsoft 用于描述软件更新的术语 。