Странно, моя хранимая процедура начала получать Msg 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. Максимальное сгенерированное системой уникальное значение для дублирующейся группы было превышено для индекса с идентификатором раздела 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
сбрасывает ли уникализатор?INSERT INTO T VALUES (1),(1),(1),(2),(2);TRUNCATE TABLE T;INSERT INTO T VALUES (1),(1),(1),(2),(2)
самый высокий уникальный идентификатор,2
я полагаю, смотрит на самый высокий уникальный идентификатор, который уже существует для этого ключа (включая записи о привидениях)