Stranamente, la mia procedura memorizzata ha iniziato a ricevere il messaggio 666 per alcuni dati di input.
La procedura memorizzata non riesce nell'ultimo passaggio quando tenta di inserire una riga in una tabella con la seguente struttura:
Columns:
A_Id: PK, int
B_Id: PK, FK, int
C_Id: PK, FK, int
D_Id: PK, smallint
Questa è essenzialmente una tabella che collega insieme tutte le entità referenziate.
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 frammentazione per entrambi gli indici è bassa (<25%). Tuttavia, la frammentazione di PK_TableName aumenta rapidamente, poiché la quantità di operazioni sulla tabella è piuttosto intensa.
Dimensioni della tavola:
Row count: ~80,000,000 rows
Quindi, quando provo a eseguire una semplice query veeery, per alcuni dei D_Id ricevo il seguente messaggio:
Messaggio 666. Il valore univoco massimo generato dal sistema per un gruppo duplicato è stato superato per l'indice con ID partizione 422223771074560. Eliminare e ricreare l'indice può risolvere questo problema; in caso contrario, utilizzare un'altra chiave di clustering.
Esempio di query:
INSERT INTO TableName
(A_Id,B_Id,C_Id,D_id)
VALUES (1,1,1,14)
Ad esempio, quando imposto D_Id su alcuni valori, non riesce, ad esempio "14". Se imposto D_ID su altri valori (1,2,3, ... 13, 15,16, ...), la query funziona correttamente.
Ho il sospetto che stia succedendo qualcosa di veramente brutto con gli indici ... Ma non riesco ad arrivare in fondo a questo ... :( Perché fallisce?
TRUNCATE TABLE
reimposta l'unicificatore?