Étrangement, ma procédure stockée a commencé à recevoir Msg 666 pour certaines données d'entrée.
La procédure stockée échoue à la dernière étape lorsqu'elle essaie d'insérer une ligne dans une table avec la structure suivante:
Columns:
A_Id: PK, int
B_Id: PK, FK, int
C_Id: PK, FK, int
D_Id: PK, smallint
Il s'agit essentiellement d'un tableau qui relie toutes les entités référencées entre elles.
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)
La fragmentation des deux indices est faible (<25%). Cependant, la fragmentation PK_TableName augmente rapidement, car la quantité d'opérations sur la table est assez intense.
Taille de la table:
Row count: ~80,000,000 rows
Ainsi, lorsque j'essaie d'exécuter une requête simple veeery, pour certains D_Id, j'obtiens le message suivant:
Msg 666. La valeur unique maximale générée par le système pour un groupe en double a été dépassée pour l'index avec l'ID de partition 422223771074560. La suppression et la recréation de l'index peuvent résoudre ce problème; sinon, utilisez une autre clé de clustering.
Exemple de requête:
INSERT INTO TableName
(A_Id,B_Id,C_Id,D_id)
VALUES (1,1,1,14)
Par exemple, lorsque j'ai défini D_Id sur certaines valeurs - il échoue, «14» par exemple. Si je mets D_ID à d'autres valeurs (1,2,3, ... 13, 15,16, ...), la requête s'exécute correctement.
Je soupçonne qu'il y a quelque chose de vraiment mauvais avec les index ... Mais je ne peux pas aller au fond des choses ... :( Pourquoi ça échoue?
la source
TRUNCATE TABLE
réinitialisation de l'unificateur est réinitialisée?INSERT INTO T VALUES (1),(1),(1),(2),(2);TRUNCATE TABLE T;INSERT INTO T VALUES (1),(1),(1),(2),(2)
l'unificateur le plus élevé est2
je suppose qu'il examine l'unificateur le plus élevé qui existe déjà pour cette clé (y compris les enregistrements fantômes)