奇怪的是,我的存储过程开始收到某些输入数据的消息666。
当存储过程尝试将行插入具有以下结构的表中时,存储过程在最后一步失败:
Columns:
A_Id: PK, int
B_Id: PK, FK, int
C_Id: PK, FK, int
D_Id: PK, smallint
这实际上是一个将所有引用的实体连接在一起的表。
Indexes:
IX_TableName_D_id - Clustered index on D_id column
PK_TableName - Unique non-clustered index on all columns (A_Id, B_Id, C_Id, D_Id)
两个索引的碎片率都很低(<25%)。但是,由于对表的操作量非常大,PK_TableName碎片迅速增加。
桌子尺寸:
Row count: ~80,000,000 rows
因此,当我尝试运行简单的查询时,对于某些D_Id,我会收到以下消息:
消息666。对于分区ID为422223771074560的索引,超出了复制组的最大系统生成的唯一值。删除并重新创建索引可能会解决此问题;否则,请使用另一个群集密钥。
查询示例:
INSERT INTO TableName
(A_Id,B_Id,C_Id,D_id)
VALUES (1,1,1,14)
例如,当我将D_Id设置为某些值时-失败,例如'14'。如果我将D_ID设置为其他值(1、2、3,... 13、15、16,...),则查询运行正常。
我怀疑索引确实发生了一些非常糟糕的事情……但是我无法深入了解……:(为什么失败了?
TRUNCATE TABLE
重置了唯一标识符?