У меня есть последовательность, которая генерирует номера для отслеживания объектов в моей системе. Он работал нормально в течение достаточно долгого времени.
На прошлой неделе мы заметили, что это начинает повторно использовать значения.
Кажется, что происходит то, что в разные моменты вечера он будет возвращаться к значению, которое было в предыдущий день. Затем он продолжит генерировать значения с этой точки.
Так, например, я мог бы получить что-то вроде этого:
10112
10113
10114
10115
10116
10117
10118
10113
10114
10115
10116
...
Кажется, что нет никакой картины в том, когда это происходит, длительности между первым использованием и вторым использованием (всего 10 минут или несколько часов) или сколько откатывается назад (всего 1 и целых несколько сотен).
Я думал о запуске трассировки (и все еще могу), но я не думаю, что объект последовательности напрямую изменяется. Я полагаю, что причина в том, что дата изменения имеет несколько дней и указывает на то время, когда мы вручную увеличили значение, чтобы попытаться устранить дубликаты. (И проблема возникла несколько раз с тех пор.)
Кто-нибудь имеет представление о том, что может вызвать откат последовательности и повторное использование значений каждую ночь?
ОБНОВЛЕНИЕ: Чтобы ответить на несколько вопросов в комментариях:
@@Version
:Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 19 октября 2012 г. 13:38:57
Создать скрипт:
CREATE SEQUENCE [schemaName].[SequenceName] AS [bigint] START WITH 410014104 INCREMENT BY 1 MINVALUE 410000000 MAXVALUE 419999999 CYCLE CACHE GO
У меня нет уникального ограничения (но я планирую его надеть). Однако это поможет мне узнать только тогда, когда я повторно использую значение. Не то, что привело к сбросу значений. Я поставил задание, которое получало бы новое значение каждые 5 минут и сохраняло его. Времена и значения скачков не следуют шаблону.
- Я проверил журналы событий, чтобы увидеть, есть ли ошибка. Единственное, что происходит, - это: http://support.microsoft.com/kb/2793634 Мы применяем исправление сегодня. Я не думаю, что это связано, но это может быть.
источник
@@VERSION
? Также что-нибудь изменилось об окружающей среде? Есть элемент подключения, сообщающий о чем-то похожем. О.П. там засчитывает его было связано с11.0.3000.0
Ответы:
Во-первых, если вам не нужны дубликаты в этом столбце, укажите это явно .
(Или вы можете сделать это первичным ключом, или изменить кластерный индекс, или что у вас ...)
В любом случае, выдавать ошибку при создании дубликата гораздо лучше, чем просто слепо вставлять дубликат, с которым вам придется иметь дело позже.
Далее, учтите, что ПОСЛЕДОВАТЕЛЬНОСТЬ - это просто генератор чисел, и по умолчанию она имеет кэш из 50 значений. В зависимости от того, как настроены ваши транзакции и какие другие критические события происходят на сервере, возможно, что SQL Server может «забыть», что он генерирует для вас определенные значения. Извините, но я не знаю точно, какие критерии влияют на воспроизведение этой ошибки. Чтобы обойти это (до тех пор, пока ошибка не будет решена / объяснена ), нужно изменить используемую последовательность
NO CYCLE
иNO CACHE
, например:Обратите внимание, что это
NO CACHE
может повлиять на производительность и параллелизм, но поможет устранить пробелы, потерянные блоки и, кто знает, может быть, ваша проблема тоже.Вы также можете убедиться, что вы используете самый последний пакет обновления и CU. На данный момент я рекомендую SP1 и CU10 с 3437 ; SP2 отсутствует, но все еще существует критическая проблема с онлайн-перестройками, которая может повлиять на вас .
источник
NO CYCLE
. (По крайней мере, это не случилось прошлой ночью.) Спасибо за помощь!