powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Identity прыгнуло на 1000
40 сообщений из 40, показаны все 2 страниц
Identity прыгнуло на 1000
    #38197970
DNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сразу в нескольких базах(одинаковых по структуре), в течении нескольких дней
поле ID int IDENTITY(1,1) в разных таблицах прыгнуло ровно на 1000
т.е. шли номера заказов ..., 11644, 11645
затем резко пошло 12645, 12646,...
а в некоторых чуть меньше чем на тысячу 173, 174, 1169, 1170

закономерности не вижу вообще
Identity( да и вообще те таблицы), никто не трогал,
за последние N лет такого никогда не случалось
месяц назад перешли на новый сервер Win 2012 + SQL Server 2012
причем сейчас уже все продолжается как положено
но клиенты возмущаются что у них прыгнули номера инвойсов, для них это важно
я тоже в шоке

в чем может быть проблема?
вероятность того что сразу несколько фирм создали 1000 заказов и тут же из удалили исключена :) проверял лог
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38197983
kalimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DNV,

http://msdn.microsoft.com/ru-ru/library/ms186775.aspx читайте замечания.
Если у вас SQL Server 2012, Вам для таких целей надо использовать sequence - http://msdn.microsoft.com/ru-ru/library/ff878058.aspx .
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38197984
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNVв чем может быть проблема?
Нет никакой проблемы.
Вы почему то решили, что IDENTITY гарантирует непрерывность значений.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198017
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalimbaЕсли у вас SQL Server 2012, Вам для таких целей надо использовать sequence - http://msdn.microsoft.com/ru-ru/library/ff878058.aspx] http://msdn.microsoft.com/ru-ru/library/ff878058.aspx .sequence тоже не гарантирует непрерывности.

Если есть такие требования у пользователей, то их нужно просто реализовывать, программировать, встроенные средства этого обеспечить не могут, и это не ошибка программистов, а осознанное решение.
DNVвероятность того что сразу несколько фирм создали 1000 заказов и тут же из удалили исключена :) проверял логМожет быть, лог фиксирует не все вставки, как реализовано логирование?
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198080
DNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
перелопатив интернет, понял что это "фишка" SQL 2012
после Fail перезагрузки SQL он такое вытворяет
как раз это это и случилось в те дни
для возврата к старому поведению советуют выполнить "Use trace flag 272"
но я что-то не понял что это за команда, и как ее выполнить
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198082
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNVперелопатив интернет, понял что это "фишка" SQL 2012
после Fail перезагрузки SQL он такое вытворяет
как раз это это и случилось в те дни
для возврата к старому поведению советуют выполнить "Use trace flag 272"
но я что-то не понял что это за команда, и как ее выполнитьЭто у вас в мозгах "фишка", исключительно. Забейте и найдите себе более полезные занятия, чем погоня за "дырками identity".
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198083
DNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще, на локальной машине у меня такое тоже случалось с SQL 2012 но я как то не реагировал
а на сервере это уже серьезно, компании - клиенты негодуют.
Переделывать систему с ручной нумерацией почти не реально
довольно большой проект сотни процедур... надо как-то вернуть старое поведение. За всю историю проекта в SQL 2000 - 2008 R2 никогда такого не было.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198084
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNVи еще, на локальной машине у меня такое тоже случалось с SQL 2012 но я как то не реагировал
а на сервере это уже серьезно, компании - клиенты негодуют.
Переделывать систему с ручной нумерацией почти не реально
довольно большой проект сотни процедур... надо как-то вернуть старое поведение. За всю историю проекта в SQL 2000 - 2008 R2 никогда такого не было.Ну, вы сами себе злобный буратина. Ставьте назад SQL 2000, чо.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198085
DNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичDNVперелопатив интернет, понял что это "фишка" SQL 2012
после Fail перезагрузки SQL он такое вытворяет
как раз это это и случилось в те дни
для возврата к старому поведению советуют выполнить "Use trace flag 272"
но я что-то не понял что это за команда, и как ее выполнитьЭто у вас в мозгах "фишка", исключительно. Забейте и найдите себе более полезные занятия, чем погоня за "дырками identity".
да нет не только у меня
если интересно, не ляпнуть а разобраться, почитайте ссылки
http://www.rsdn.ru/forum/db/5059467.all
https://connect.microsoft.com/SQLServer/feedback/details/739013/alwayson-failover-results-in-reseed-of-identity#details

это именно поведение SQL 2012
и я не могу просто это проигнорировать, т.к. это касается не меня а клиентов
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198086
DNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичНу, вы сами себе злобный буратина. Ставьте назад SQL 2000, чо.
вы когда нибудь делали downgrade базы? только реально, а не теоретически?
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198087
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNVГавриленко Сергей Алексеевичпропущено...
Это у вас в мозгах "фишка", исключительно. Забейте и найдите себе более полезные занятия, чем погоня за "дырками identity".
да нет не только у меня
если интересно, не ляпнуть а разобраться, почитайте ссылкиМне реально не интересно разбираться, почему некоторый механизм не ведет себя так, как никогда и не гарантировалось, что он должен себя вести.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198089
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNVГавриленко Сергей АлексеевичНу, вы сами себе злобный буратина. Ставьте назад SQL 2000, чо.
вы когда нибудь делали downgrade базы? только реально, а не теоретически?Ну ради клиентов бы сделал, если посчитал, что сделать нормальную нумерацию сложнее, чем даунгрейднуть базу.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198092
DNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда избавьте меня от своих словоиспражнений, и дайте ответить тем кто может мне помочь.
провалы при удалении или при rollback не интересуют
но вот еще один скачок в 1000 единиц может привести к серьезному конфлитку с заказчиками
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198095
DNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к переносу сервера мы готовились почти полгода, т.к. простои недопустимы
и если я просто скажу начальству а двайте-ка еще раз переустановим сервер, меня не поймут
единственное решение в сложившейся ситуации - возврат к старому поведению.
разберусь, отпишу что сделал
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198096
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNVГавриленко Сергей АлексеевичНу, вы сами себе злобный буратина. Ставьте назад SQL 2000, чо.
вы когда нибудь делали downgrade базы? только реально, а не теоретически?
Делали. Относительно несложно

Нумерацию переделать с identity на сиквенс/иной счетчик - тоже довольно несложно, даже при наличии не слишком правильно написанного приложения.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198098
DNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198100
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNVк переносу сервера мы готовились почти полгода, т.к. простои недопустимыХреново вы готовились, раз такой (в ваших понятиях) косяк проморгали.
DNVтогда избавьте меня от своих словоиспражнений, и дайте ответить тем кто может мне помочь.Посты одного мембера данного ресурса никак не могут помешать писать ответы другому. Плохо, что такие очевидные вещи для вас не очевидны.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198106
DNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на локальном компе помог вариант с
http://i.ll.do/2013/01/how-to-solve-sql-server-2012-identity.html
What I did: Setting Trace Flag 272 on SQL Server 2012

Open "SQL Server Configuration Manager"
Click "SQL Server Services" on the left pane
Right-click on your SQL Server instance name on the right pane ->Default: SQL Server(MSSQLSERVER)
Click "Properties"
Click "Startup Parameters"
On the "specify a startup parameter" textbox type "-T272"
Click "Add"
Confirm the changes


буду завтра запускать на сервере
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198184
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNV,

Тебе-то что за горе?
Ну, прыгнули...
Сервер надо аккуратно гасить, и все будет ок с идентити. Но если и прыгнет — ничего страшного.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198185
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNV,

У тебя номера инвойсов через identity генерируются? Ну-ну...
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198192
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNV, запомни раз и навсегда

Identity гарантирует уникальность, а не генерацию в восходящем порядке, без дырок. Он так устроен by design. Он именно поэтому быстр. А генерация в строго восходящем порядке вообще требует сериализации всех транзакций к данной таблице, чего ты явно не хотел бы.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198198
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivIdentity гарантирует уникальностьНе гарантирует.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198212
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNVпопробую этот вариант
http://i.ll.do/2013/01/how-to-solve-sql-server-2012-identity.html

Тебе не identity надо фиксить, а логику своего приложения, тебе надо переделать генерацию номеров инвойсов с identity на свой собственный генератор.

PK таблицы оставляешь в покое, как он есть, добавляешь туда ещё одно поле, номер инвойса, посде добавления UPDATE-ишь его из старого поля (PK). Заменяешь в приложении все случаи использования старого PK как номера инвойса на новое поле.
при очень большом количестве таких мест или сложном изменении можно сделать наоборот -- добавить новое поле для первичного ключа, и про UPDATE-ить его из старого поля. По идее, PK должен использоваться реже и более детерминировано, чем номер инвойса.

Ну и о генерации нового номера инвойса --
делаешь таблицу

NEXT_DOCUMENT_NUMBER
(
document_type varchar(50) primary key,
next_doc_number int
...
);


Ну и внутри транзакции создания документа делаешь

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
begin tran

...

update NEXT_DOCUMENT_NUMBER
set next_doc_number = next_doc_number + 1
where document_type = 'INVOICE'

select @new_invoice_no =  next_doc_number - 1
from NEXT_DOCUMENT_NUMBER
where document_type = 'INVOICE'


insert into INVOICE (invoice_no,...) values ( @new_invoice_no, ...)
...


commit / rollback
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198214
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmMasterZivIdentity гарантирует уникальностьНе гарантирует.

Оно гарантирует, что при правильном использовании оно будет тебе генерировать уникальное значение при каждом обращении.
И это в многопользовательской среде.
Естественно, в БД констрейнтом identity не является, если ты это имел в виду.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198224
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЕстественно, в БД констрейнтом identity не является, если ты это имел в виду.Вот именно. Поэтому, имхо, нельзя говорить, что Identity гарантирует уникальность, дабы не вводить в заблуждение новичков.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198275
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNV,

для Вас уже всё разработали:

http://www.gotdotnet.ru/blogs/DeColores/1933/
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #38198453
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmMasterZivЕстественно, в БД констрейнтом identity не является, если ты это имел в виду.Вот именно. Поэтому, имхо, нельзя говорить, что Identity гарантирует уникальность, дабы не вводить в заблуждение новичков.

По этой причине ВООБЩЕ НИЧЕГО нельзя говорить тогда.
Им блин чё не скажешь, всё не так поймут.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Identity прыгнуло на 1000
    #39642549
Барсег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DNV, у меня также было и с 2008-м mssql, тогда не было критично, хоть на 2000 тысячи увеличивает, а для нынешней моей задачи нужен ровный счет.)
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #39642676
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БарсегDNV, у меня также было и с 2008-м mssql, тогда не было критично, хоть на 2000 тысячи увеличивает, а для нынешней моей задачи нужен ровный счет.)

Т.е. вы уверены, что юзер DNV забросил всё, 5 лет мониторит тему в ожидании ответа
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #39642820
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DNVтогда избавьте меня от своих словоиспражнений, и дайте ответить тем кто может мне помочь.
провалы при удалении или при rollback не интересуют
но вот еще один скачок в 1000 единиц может привести к серьезному конфлитку с заказчиками

Если бизнес логика вашего приложения требует создания непрерывного диапазона (последовательности) значений, то это надо реализовать механизмами, которые дают такую непрерывность. IDENTITY к таким механизмам не относится. Можно сделать NOCACHE и СНИЗИТЬ ВЕРОЯТНОСТЬ разрывов, но добиться их отсутствия нельзя. Нужно, чтобы ваше приложение это контролировало само.

Приложение, может использовать значения, а потом произойдет откат транзакции. И разрыва не избежать. Даже sequence не панацея.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #39642950
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему 2017 прикрутили некешируемый идентити по выбору.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #39642961
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовПо-моему 2017 прикрутили некешируемый идентити по выбору.Осталось дождаться, когда еще и откатываемый прикрутят.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #39643061
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовПо-моему 2017 прикрутили некешируемый идентити по выбору. В смысле - 2017? Его сразу сделали по флагу, как только ввели кэширование - флаг 272.

С 2017 добавили возможность устанавливать этот параметр на уровне базы данных.

ALTER DATABASE SCOPED CONFIGURATION
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Identity прыгнуло на 1000
    #40036933
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коллеги
подскажите плз
две тестовые таблицы
после перезагрузки БД и добавления строк один идентити на тбл Countries прыгнул на 1000, второй на тбл Humans пошел дальше (дырка на 1 единицу)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
USE [devs]
GO

/****** Object:  Table [dbo].[Countries]    Script Date: 18.01.2021 19:20:40 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Countries](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](max) NULL,
	[Population] [int] NOT NULL,
	[SickCount] [int] NOT NULL,
	[DeadCount] [int] NOT NULL,
	[RecoveredCount] [int] NOT NULL,
	[Vaccine] [bit] NOT NULL,
 CONSTRAINT [PK_Countries] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO




USE [devs]
GO

/****** Object:  Table [dbo].[Humans]    Script Date: 18.01.2021 19:20:14 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Humans](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[FirstName] [nvarchar](max) NULL,
	[LastName] [nvarchar](max) NOT NULL,
	[Age] [int] NOT NULL,
	[IsSick] [bit] NOT NULL,
	[CountryId] [int] NOT NULL,
	[Gender] [int] NULL,
 CONSTRAINT [PK_Humans] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[Humans] ADD  DEFAULT (N'') FOR [LastName]
GO

ALTER TABLE [dbo].[Humans] ADD  DEFAULT ((0)) FOR [Gender]
GO

ALTER TABLE [dbo].[Humans]  WITH CHECK ADD  CONSTRAINT [FK_Humans_Countries_CountryId] FOREIGN KEY([CountryId])
REFERENCES [dbo].[Countries] ([Id])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[Humans] CHECK CONSTRAINT [FK_Humans_Countries_CountryId]
GO

Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
Sep 24 2019 13:48:23
Copyright (C) 2019 Microsoft Corporation
Express Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 18363: )
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #40036934
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #40037009
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
подскажите плз
Что подсказать?
Почему так произошло, написано выше.
Как замедлить работу сервера, попутно уменьшив вероятность появления "дырок", тоже написано выше.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #40037013
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уменьшение вероятности дырок не волнует
где надо будет без дырок, я разберусь как сделать

в прошлый раз корректировал обе таблицы
интересно - почему на одной скакнуло, а на другой нет
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #40037015
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Как замедлить работу сервера, попутно уменьшив вероятность появления "дырок", тоже написано выше.

И что наличие дырок всё равно будет из-за отката транзакций, тоже упомянули.
Интересно, есть ли люди, которые жалуются на пропуски в последовательности NEWSEQUENTIALID?
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #40037035
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
интересно - почему на одной скакнуло, а на другой нет
Возможно
1. Просто так совпало, что на момент "перезагрузки" кеш для одной из таблиц был исчерпан.
2. С предыдущей "перезагрузки" данные в одну из таблиц не добавляллись.
3. Для одной из таблиц было выполнено dbcc checkident с reseed.
4. Неизвестная бага.
...
Рейтинг: 0 / 0
Identity прыгнуло на 1000
    #40037048
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

спасибо
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Identity прыгнуло на 1000
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]