МАССИВНЫЙ скачок значения столбца идентификаторов в SQL Server 2014
Итак, в середине базового кодирования и тестирования мы увидели огромный скачок значений идентификаторов для нескольких таблиц, не связанный с шаблоном. Нам неизвестны какие-либо сбои на сервере или попытки массовых операций, но администраторы баз данных изучают журналы.
Пробелы не типичны для 1000 или 10 000, наблюдаемых при перезапуске сервера и тому подобном.
Разрыв Application_NO
составляет 10 410 345 для таблицы с 2320 строками.
Transaction_Payment_NO
подскочил на удивительные 1,712,149,313 для таблицы с 685 записями.
Есть идеи, что могло вызвать такие большие и, казалось бы, произвольные прыжки?

Ответы
Некоторые возможные виновники:
- процесс тестирования создает много строк в транзакции, а затем откатывает транзакцию
Это кажется наиболее вероятной причиной, поскольку вы упомянули, что в настоящее время проводите тестирование. Возможно, выполняются автоматические тесты, которые вносят изменения в эти таблицы, проверяют результаты, а затем откатывают изменения.
Значения идентификаторов не используются повторно после отката транзакции, что приводит к появлению больших пробелов в этом сценарии.
- Кто-то использовал
RESEED
команду
Вы можете вручную изменить текущее значение «следующего идентификатора» с помощью этой команды:
DBCC CHECKIDENT ('dbo.Transaction_Payment_NO', RESEED, 1712149313);
Это кажется менее вероятным, потому что вам или одному из администраторов придется изо всех сил сделать это. Так же...
- Кто-то вставил эти значения вручную
Вы можете вставить все, что хотите, в IDENTITY
столбец, сначала выполнив этот оператор:
SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
- Отработка отказа и перезапуски
Вы упомянули об этом в вопросе, но просто для полноты - SQL Server кэширует значения идентификаторов для повышения производительности. Но эти предварительно назначенные значения идентификаторов могут быть потеряны, если служба перезапустится или произойдет переключение AG. Однако это приводит к более предсказуемым пробелам (10 000 в современных версиях SQL Server).