Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 почему identity инкрементирует каждый раз на разное значение  [new]
Хорев Иван
Member

Откуда:
Сообщений: 19
Добрый день!

Есть таблица

create table logs
(
	id bigint identity not null constraint pk_logs primary key clustered,
	hst varchar(32) null,
	lbl varchar(32) null,
	txt nvarchar(max) null,
	dt datetime constraint df_logs_dt default (getdate()),
)


и записи в ней (20721 строка)

id	hst	lbl	                txt	dt
274381	PROG2	CloseFile(WrittenFile)	1 	2012-05-17 16:19:46.023
...
5886670	PROG2	CloseFile(WrittenFile)	7.1 	2012-05-17 19:55:15.197
5886673	PROG2	CloseFile(WrittenFile)	7.2 	2012-05-17 19:55:15.197
5886675	PROG2	CloseFile(WrittenFile)	7.3 	2012-05-17 19:55:15.210
5886676	PROG2	CloseFile(WrittenFile)	8 	2012-05-17 19:55:15.210
5916598	PROG2	CloseFile(WrittenFile)	1 	2012-05-17 19:56:15.260
5916599	PROG2	CloseFile(WrittenFile)	2 	2012-05-17 19:56:15.260
5916600	PROG2	CloseFile(WrittenFile)	3 	2012-05-17 19:56:15.260
5916601	PROG2	CloseFile(WrittenFile)	4 	2012-05-17 19:56:15.260
5916603	PROG2	CloseFile(WrittenFile)	4.1 	2012-05-17 19:56:15.273
5916606	PROG2	CloseFile(WrittenFile)	4.2 	2012-05-17 19:56:15.273
5916608	PROG2	CloseFile(WrittenFile)	5 	2012-05-17 19:56:15.273
...
30525295	PROG2	CloseFile(WrittenFile)	8 	2012-05-18 13:08:43.460


Вопрос, почему значение в поле id увеличивается каждый раз на различное значение, ведь identity = identity(1,1)
В среднем инкремент равен = 1460

Win7+MsSql2008
18 май 12, 09:25    [12574364]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Хорев Иван
Вопрос, почему значение в поле id увеличивается каждый раз на различное значение, ведь identity = identity(1,1)
Либо были удаления, либо неподтверждённые транзакции.
18 май 12, 09:28    [12574380]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Вы уверены, что у Вас каждая вставка коммитится, а не ролбэчится?!
18 май 12, 09:28    [12574386]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
step_ks
Member

Откуда:
Сообщений: 936
Вот в соседней теме Mnior сообщает, что знает, как могут получиться пропуски. Если, конечно, это не функция identity() в select into имелась ввиду - она-то запросто пропускает.
18 май 12, 09:41    [12574483]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
Хорев Иван
Member

Откуда:
Сообщений: 19
alexeyvg,

Удалений точно не было, и транзакции все подтверждаются, вроде (эксепшенов в ADO не было)
вот код на вставку

                using(var connection = new SqlConnection(connectionString))
                {
                    connection.Open();

                    var command = new SqlCommand("insert into logs (hst, lbl, txt) values (@hst, @lbl, @txt)", connection);

                    command.Parameters.AddWithValue("@hst", Environment.MachineName);
                    command.Parameters.AddWithValue("@lbl", label);
                    command.Parameters.AddWithValue("@txt", message);

                    command.ExecuteNonQuery();
                }
18 май 12, 11:14    [12575345]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
Хорев Иван
Member

Откуда:
Сообщений: 19
pkarklin,

Да, с большой долей убеждённости уверен, все записи которые вставлялись - присутствуют в таблице
18 май 12, 11:16    [12575359]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Хорев Иван,

Чудес не бывает...
18 май 12, 11:24    [12575432]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
aleonov
Member

Откуда:
Сообщений: 96
не нужно гадать, запусти трейсер с фильтром на таблицу и все увидишь..
18 май 12, 11:28    [12575475]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
step_ks
Вот в соседней теме Mnior сообщает, что знает, как могут получиться пропуски.
Там другое. Там дырок почти нет. Но строки в многострочной вставке идут не подрят. (INSERT SELECT с Loop соединением в плане)
18 май 12, 11:34    [12575545]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
step_ks
Member

Откуда:
Сообщений: 936
Mnior
Там другое. Там дырок почти нет

эээ, т.е. все-таки могут быть?
18 май 12, 11:50    [12575702]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
step_ks, 12574380
18 май 12, 12:35    [12576136]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
step_ks
Member

Откуда:
Сообщений: 936
Mnior, эт само собой, не стал бы я вас спрашивать про такие случаи. Думал, может, вы опять откопали какие багофичи
18 май 12, 15:34    [12577972]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
RubinDm
Member

Откуда:
Сообщений: 461
step_ks, чудес действительно не бывает. но даже если и бывают.. стоит ли полагаться на непрерывность identity и проверять ее?! рано или поздно Ваша транзакция все равно отвалится (например, из-за возможных проблем с сетью, или с электропитанием клиента или сервера). А если так, то дырки в identity по определению неизбежны и должны рассматриваться как норма. Поправьте меня, если я не прав.
18 май 12, 16:32    [12578795]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
RubinDm
Member

Откуда:
Сообщений: 461
Хорев Иван, чудес действительно не бывает. но даже если и бывают.. стоит ли полагаться на непрерывность identity и проверять ее?! рано или поздно Ваша транзакция все равно отвалится (например, из-за возможных проблем с сетью, или с электропитанием клиента или сервера). А если так, то дырки в identity по определению неизбежны и должны рассматриваться как норма. Поправьте меня, если я не прав.
18 май 12, 16:34    [12578808]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
У меня есть тоже подозрение, что есть "проблема".
Хорев Иван, Каков %% дырок и плотность строк по времени.
Постройте почасовой график этих двух величин и их отношения.
А потом отдельно на графике их отношений. Если будет круговая область (чуууть вытянутое), то всё нормально, если ближе к кривой, то есть проблема.
18 май 12, 18:26    [12579599]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
NoLock
Member

Откуда: левый верний угол
Сообщений: 90
Подтверждаю, такой эффект существует; аналогично identity(1,1); строки вставляются простым insert-ом.
Microsoft SQL Server 2012; получается в одной таблице:
timestamp, id
2012-04-30 15:11:00.000 180
2012-04-30 15:11:09.000 181
2012-04-30 14:52:54.000 10181
2012-04-30 15:21:37.000 10184
...
другая таблица:
2012-04-30 15:13:14.000 105
2012-04-30 15:11:09.000 106
2012-04-30 15:20:00.000 10106
2012-05-01 13:06:18.000 10107
...
то же самое было и в 2008, 2008 Р2
18 май 12, 21:18    [12580319]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
RubinDm
Member

Откуда:
Сообщений: 461
NoLock
Подтверждаю, такой эффект существует

Mnior, и как это следует интерпретировать? :/
18 май 12, 21:49    [12580473]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
А в чем, собственно, проблема? Ну есть дырка в значениях первичного ключа. И что с того?
18 май 12, 22:07    [12580539]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
RubinDm
NoLock
Подтверждаю, такой эффект существует
Mnior, и как это следует интерпретировать? :/
1. Никак. Он не подтвердил. Привёл же метод доказательства, осталось его сделать. На самом деле уровень ошибок в системах может быть и не маленький (люди просто не подозревают).
2. Чё вы ко мне прицепились. Составили бы эту статистику на своих данных.
3. Проблема может быть в особенности стратегии генерации сиквенсов, для уменьшения блокировок, и вообще в работе самой вставки данных.
Или блочное выделение номеров, или перевыделение, или перестроение строк в индексе или разного количества строк на странице ...
19 май 12, 04:39    [12581242]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
Хорев Иван
Member

Откуда:
Сообщений: 19
Mnior
Хорев Иван, Каков %% дырок и плотность строк по времени.
Постройте почасовой график этих двух величин и их отношения.


Обязательно построю, после выходных, пусть наберётся 10^6 записей.
19 май 12, 10:01    [12581330]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
Хорев Иван
Member

Откуда:
Сообщений: 19
londinium
А в чем, собственно, проблема? Ну есть дырка в значениях первичного ключа. И что с того?


Как я уже писал в первом сообщении средний инкремент составляет 1460 вместо 1.

То есть свободные значения закончатся в полторы тысячи раз быстрее чем мы ожидали.

При такой постановке вопроса опасно использовать диапазон значений bigint, неговоря уже о int.
19 май 12, 10:05    [12581334]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
NoLock
Подтверждаю, такой эффект существует; аналогично identity(1,1); строки вставляются простым insert-ом.


А еще было бы классно увидеть запускабельный код для просмотра сего эффекта...
19 май 12, 10:47    [12581359]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
step_ks
Member

Откуда:
Сообщений: 936
Хорев Иван
При такой постановке вопроса опасно использовать диапазон значений bigint

Эт сколько записей у вас вставляется в секунду?
19 май 12, 11:43    [12581412]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Хорев Иван
При такой постановке вопроса опасно использовать диапазон значений bigint, неговоря уже о int.
Ну освойте калькулятор, что ли. Если у вас одна запись в среднем съедает в 1500 раз больше, то даже вставляя по 100к записей в секунду ежесекундно и без перерывов, положительной половины диапазона bigint вам хватит на 1949 лет. Опасно?

Сообщение было отредактировано: 19 май 12, 12:09
19 май 12, 12:08    [12581444]     Ответить | Цитировать Сообщить модератору
 Re: почему identity инкрементирует каждый раз на разное значение  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
И полную версию сервера покажите, может быть у вас там бета какая махровая.
19 май 12, 12:10    [12581456]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить