奇妙なことに、私のストアード・プロシージャーは、一部の入力データについてメッセージ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
したがって、veeery simpleクエリを実行しようとすると、一部の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
、一意識別子がリセットされるかどうかを確認できますか?