Anehnya, prosedur tersimpan saya mulai menerima Msg 666 untuk beberapa data input.
Prosedur tersimpan gagal pada langkah terakhir ketika mencoba memasukkan baris ke dalam tabel dengan struktur berikut:
Columns:
A_Id: PK, int
B_Id: PK, FK, int
C_Id: PK, FK, int
D_Id: PK, smallint
Ini pada dasarnya adalah tabel yang menghubungkan semua entitas yang dirujuk bersama.
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)
Fragmentasi untuk kedua indeks rendah (<25%). Namun fragmentasi PK_TableName cepat tumbuh, karena jumlah operasi di atas meja cukup kuat.
Ukuran meja:
Row count: ~80,000,000 rows
Jadi, ketika saya mencoba menjalankan query sederhana veeery, untuk beberapa D_Id saya mendapatkan pesan berikut:
Msg 666. Nilai unik yang dihasilkan sistem maksimum untuk grup duplikat terlampaui untuk indeks dengan ID partisi 422223771074560. Menjatuhkan dan membuat kembali indeks dapat menyelesaikan ini; jika tidak, gunakan kunci pengelompokan lain.
Contoh pertanyaan:
INSERT INTO TableName
(A_Id,B_Id,C_Id,D_id)
VALUES (1,1,1,14)
Misalnya, ketika saya menetapkan D_Id ke beberapa nilai - gagal, '14' misalnya. Jika saya menetapkan D_ID ke nilai lain (1,2,3, ... 13, 15,16, ...), kueri akan berjalan dengan baik.
Saya menduga ada sesuatu yang sangat buruk terjadi dengan indeks ... Tapi saya tidak bisa sampai ke dasar ini ... :( Mengapa gagal?
sumber
TRUNCATE TABLE
mereset unikifier?INSERT INTO T VALUES (1),(1),(1),(2),(2);TRUNCATE TABLE T;INSERT INTO T VALUES (1),(1),(1),(2),(2)
maka peningkat tertinggi adalah2
saya kira itu melihat peningkat tertinggi yang sudah ada untuk kunci itu (termasuk catatan hantu)