МАССИВНЫЙ скачок значения столбца идентификаторов в SQL Server 2014

Aug 19 2020

Итак, в середине базового кодирования и тестирования мы увидели огромный скачок значений идентификаторов для нескольких таблиц, не связанный с шаблоном. Нам неизвестны какие-либо сбои на сервере или попытки массовых операций, но администраторы баз данных изучают журналы.

Пробелы не типичны для 1000 или 10 000, наблюдаемых при перезапуске сервера и тому подобном.

Разрыв Application_NOсоставляет 10 410 345 для таблицы с 2320 строками.

Transaction_Payment_NO подскочил на удивительные 1,712,149,313 для таблицы с 685 записями.

Есть идеи, что могло вызвать такие большие и, казалось бы, произвольные прыжки?

Ответы

5 JoshDarnell Aug 19 2020 at 01:06

Некоторые возможные виновники:

  1. процесс тестирования создает много строк в транзакции, а затем откатывает транзакцию

Это кажется наиболее вероятной причиной, поскольку вы упомянули, что в настоящее время проводите тестирование. Возможно, выполняются автоматические тесты, которые вносят изменения в эти таблицы, проверяют результаты, а затем откатывают изменения.

Значения идентификаторов не используются повторно после отката транзакции, что приводит к появлению больших пробелов в этом сценарии.

  1. Кто-то использовал RESEEDкоманду

Вы можете вручную изменить текущее значение «следующего идентификатора» с помощью этой команды:

DBCC CHECKIDENT ('dbo.Transaction_Payment_NO', RESEED, 1712149313);

Это кажется менее вероятным, потому что вам или одному из администраторов придется изо всех сил сделать это. Так же...

  1. Кто-то вставил эти значения вручную

Вы можете вставить все, что хотите, в IDENTITYстолбец, сначала выполнив этот оператор:

SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
  1. Отработка отказа и перезапуски

Вы упомянули об этом в вопросе, но просто для полноты - SQL Server кэширует значения идентификаторов для повышения производительности. Но эти предварительно назначенные значения идентификаторов могут быть потеряны, если служба перезапустится или произойдет переключение AG. Однако это приводит к более предсказуемым пробелам (10 000 в современных версиях SQL Server).