Значение столбца идентификатора внезапно переходит на 1001 в sql-сервере

Я использую Sql server 2012 (Denali). Интересно, почему все значения столбца идентичности начинаются с 1001 и так далее? В начале столбец Identity начинается с 1,2 и т.д., И плавно добавляется идентификатор, но внезапно он переходит к 1001 1002 и далее для всей таблицы в базе данных, содержащей столбец идентификаторов. Что может быть причиной? Пожалуйста помогите.

Ответ 1

Корпорация Майкрософт изменила способ использования идентификационных значений в SQL Server 2012, и в результате этого вы можете увидеть пробелы между вашими учетными записями после перезагрузки вашего экземпляра SQL-сервера или вашего сервера. Могут возникнуть некоторые другие причины этого пробела идентификатора, возможно, это связано с автоматическим перезапуском сервера после установки обновления.

Вы можете использовать ниже двух вариантов

  • Использовать флаг трассировки 272 o Это приведет к созданию записи журнала для каждого генерируемого значения идентификации. На производительность генерации идентификаторов может повлиять включение этого символа трассировки.
  • Используйте генератор последовательности с настройкой NO CACHE

    Установка флагов трассировки 272 на SQL Server 2012, который вы ожидаете здесь

  • Откройте "Диспетчер конфигурации SQL Server"

  • Нажмите "Службы SQL Server" на левой панели
  • Щелкните правой кнопкой мыши имя экземпляра SQL Server на правой панели → По умолчанию: SQL Server (MSSQLSERVER)
  • Нажмите "Свойства"
  • Нажмите "Параметры запуска"
  • В поле "указать параметр запуска" введите текстовое поле "-T272"
  • Нажмите "Добавить"
  • Подтвердите изменения

Ответ 2

Я считаю, что у вас есть объяснение в комментарии к этому элементу соединения. Отказоустойчивость или перезапуск результатов в Reseed of Identity

Чтобы повысить предварительную производительность для высокопроизводительных машин, мы вводим preallocation для значения идентичности в 2012 году. И эта функция может быть отключен с помощью TF 272 (тогда вы получите поведение от 2008R2).

Свойства идентификации сохраняются отдельно в метаданных. Если значение используется в тождестве и вызывается приращение, затем новое начальное значение будут установлены. Никакой операции, включая Откат, Отказоустойчивость,..... может измените начальное значение, за исключением повторения DBCC. Отказоустойчивость применяется для table, но не объект идентичности. Поэтому для перехода на другой ресурс вы можете контрольную точку вызова перед отказом вручную, но вы можете увидеть пробел для незапланированные случаи. Если разрыв вызывает беспокойство, я предлагаю вам использовать TF 272.

Для остановки диспетчера управления у нас есть исправление для следующего варианта (с другой TF). Это исправление позаботится о большинстве отключений диспетчера управления случаев.

Ответ 3

Я думаю, вы могли бы использовать последовательность вместо этого, последовательность дает вам 100% полный контроль и во многих отношениях намного превосходит по сравнению с личностью... Идентичность просто так прост и удобна

http://msdn.microsoft.com/en-us/library/ff878091.aspx

Насколько я знаю, когда вы вставляете идентификатор и терпите неудачу, идентификатор используется в любом случае, Verified

с последовательностью вы можете сделать это "заполнить" пробелы, используя цикл. Хотя, как указывает Amy Barrett, это создается вне сферы действия транзакции.

Существует оптимизация производительности, когда вы используете кеш, который также может быть полезен.