You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非分区表索引在sys.partitions中出现重复行的问题排查

Azure SQL Database自动调优索引sys.partitions重复行异常问题

问题详情

  • 涉及两张非分区表,其中一张表含116列、40个索引;两张表中由自动调优生成的索引均出现异常:在sys.partitions中存在两行相同object_id、index_id、partition_number的记录
  • 关联sys.dm_db_partition_stats查询时,仅其中一行有数据,但另一行在sys.allocation_units中显示占用空间
  • 常规索引重建操作无法消除重复行;删除该索引后重建,仍会保留重复行及原index_id;手动创建同定义的索引则无此问题
  • DBCC CHECKDB与DBCC CHECKTABLE结果均正常,且无法在其他环境复现该异常

sys.partitions示例数据

partition_idobject_idindex_idpartition_numberhobt_idrowsfilestream_filegroup_iddata_compressiondata_compression_descxml_compressionxml_compression_desc
720575940821647361874105717411720575940821647364829700NONE0OFF
7205759412463206418741057174117205759412463206490569500NONE0OFF

排查重复行的SQL语句

SELECT object_id, index_id, partition_number, count(*) as [# Rows]
FROM sys.partitions
GROUP BY object_id, index_id, partition_number
HAVING COUNT(*) > 1

可能的原因分析

  • 自动调优索引后台操作的元数据不一致:Azure SQL自动调优的索引创建/维护流程在后台异步执行,若过程中遇到突发中断(如资源争抢、进程异常终止),可能导致元数据表sys.partitions与实际存储结构出现关联异常,常规重建操作无法修复这类元数据层面的残留问题
  • 非分区表的分区元数据遗留异常:尽管表是非分区配置,但内部操作可能残留了重复的分区元数据条目,这类孤立条目不属于数据损坏范畴(因此CHECKDB无异常),常规索引操作不会触发清理逻辑
  • 自动调优索引的系统标识复用问题:自动调优生成的索引带有系统内部标识,删除重建时系统可能未完全清理旧的元数据记录,导致新索引复用原index_id时,旧的分区条目未被移除,从而出现重复记录

内容的提问来源于stack exchange,提问作者Nic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:50:34