powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Замена Identity в больших таблицах
25 сообщений из 25, страница 1 из 1
Замена Identity в больших таблицах
    #40114123
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема уже была здесь несколько раз, но актуальна.
Итак, вопрос:

Есть большая таблица с ПК int identity, которых скоро захлебнется.
Как заменить его на bigint identity не спрашиваю, уже было и сам делал.

Как заменить его на Sequence в существующей таблице? может это более простая замена для рабочей базы?
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114146
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин
Тема уже была здесь несколько раз, но актуальна.
Итак, вопрос:

Есть большая таблица с ПК int identity, которых скоро захлебнется.
Как заменить его на bigint identity не спрашиваю, уже было и сам делал.

Как заменить его на Sequence в существующей таблице? может это более простая замена для рабочей базы?

Сбросьте Identity на минимальное отрицательное значение и оставьте проблему будущим поколениям.
:-)
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114155
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Ролг Хупин
Тема уже была здесь несколько раз, но актуальна.
Итак, вопрос:

Есть большая таблица с ПК int identity, которых скоро захлебнется.
Как заменить его на bigint identity не спрашиваю, уже было и сам делал.

Как заменить его на Sequence в существующей таблице? может это более простая замена для рабочей базы?

Сбросьте Identity на минимальное отрицательное значение и оставьте проблему будущим поколениям.
:-)


"Главное в следственных действиях - это не выйти на самих себя."

Эх, уже сделал когда-то,но парадокс в том, что я получился тем самым будущим поколением.
Скоро п-ц, вот и думаю
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114181
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Как заменить его на bigint identity не спрашиваю, уже было и сам делал.
Как заменить его на Sequence в существующей таблице? может это более простая замена для рабочей базы?

Точно так же, как и для замены identity, только в случае sequence для колонки с id нужно задавать не identity specification, а default constraint, который будет при вставке подставлять в id next value из сиквенса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
-- было
create table test.test (
  n int identity not null primary key,
  name varchar(10) not null
)
go
-- стало
create table test.test (
  n int not null primary key default(next value for test.sq_test) ,
  name varchar(10) not null
)
go


Разумеется, для второго случая сиквенс уже должен быть создан.
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114184
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Может, сделать IDENTITY DEC(38,0) ??
До конца Земли должно хватить
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114185
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap
Ролг Хупин,

Может, сделать IDENTITY DEC(38,0) ??
До конца Земли должно хватить


в живой таблице с хх млн записей пройдет по-быстрому?
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114191
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
use tempdb;
go

create table dbo.t (id int identity constraint PK_t primary key (id), a int);
insert into dbo.t (a) select top (10) object_id from sys.objects where object_id > 0;
select id, a from dbo.t order by id;
go

alter table dbo.t drop constraint PK_t;
go

alter table dbo.t alter column id bigint not null;
alter table dbo.t add constraint PK_t primary key (id);
insert into dbo.t (a) select top (1) -object_id from sys.objects where object_id > 0;
select id, a from dbo.t order by id;
go

drop table dbo.t;
go
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114202
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага. И не дай бог это куда-то на клиент тянется.
Если нет - то, в принципе - возможно.
А если да - то, в общем случае - не решаемо. Т.к. замена PK в основной и FK в дочерних таблицах не приведет к замене размера этих полей на уровне модели данных в исходном коде клиента.
В итоге, в аналогичном случае, мы просто забекапили старую базу, а новую - начали с нуля.
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114283
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Ага. И не дай бог это куда-то на клиент тянется.
Если нет - то, в принципе - возможно.
А если да - то, в общем случае - не решаемо. Т.к. замена PK в основной и FK в дочерних таблицах не приведет к замене размера этих полей на уровне модели данных в исходном коде клиента.
В итоге, в аналогичном случае, мы просто забекапили старую базу, а новую - начали с нуля.


вот-вот, я приблизительно об этом
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114304
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Т.к. замена PK в основной и FK в дочерних таблицах не приведет к замене размера этих полей на уровне модели данных в исходном коде клиента.
А замена на bigint sequence приведет?
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114334
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
uaggsterзамена PK в основной и FK в дочерних таблицах не приведет к замене размера этих полей на уровне модели данных в исходном коде клиента.

вот-вот, я приблизительно об этомЕсли вопрос в этом, а не из стартового топика, то понятно, что одним кликом это не решается.
Нужно постепенно отрефакторить клиента, а потом уже менять базу.
Но, в общем, ничего особенно фантастического и нерешаемого тут нет, однако потребуется поработать некоторое время (но всё таки меньше, чем ещё раз создать подобную систему).
Помню, как то делал изменение ИД с guid на bigint в большой загруженной базе, разработка заняла месяц, потом сам процесс перехода месяц, конечно, без остановки сервиса.
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114467
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Ролг Хупин
пропущено...

вот-вот, я приблизительно об этом
Если вопрос в этом, а не из стартового топика, то понятно, что одним кликом это не решается.
Нужно постепенно отрефакторить клиента, а потом уже менять базу.
Но, в общем, ничего особенно фантастического и нерешаемого тут нет, однако потребуется поработать некоторое время (но всё таки меньше, чем ещё раз создать подобную систему).
Помню, как то делал изменение ИД с guid на bigint в большой загруженной базе, разработка заняла месяц, потом сам процесс перехода месяц, конечно, без остановки сервиса.


ясно, и вопрос - что лучше: sequence или identity? стоит заморачиваться с заменой i на s в принципе?
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114680
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
и вопрос - что лучше: sequence или identity? стоит заморачиваться с заменой i на s в принципе?
Вот этого не знаю, сиквенсов никогда не использовал, в силу привычки.
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114698
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

identity должно побыстрее работать, я так думаю.
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114779
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Ролг Хупин
и вопрос - что лучше: sequence или identity? стоит заморачиваться с заменой i на s в принципе?
Вот этого не знаю, сиквенсов никогда не использовал, в силу привычки.


аналогично, но тяга к знаниям.
Есть там +: sequence можно альтернуть по-живому, не все, но что-то изменть: мин, макс, старт, шаг.
Кроме того, есть какой-то кеш. На больших базах должен быть выигрыш
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114800
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
в живой таблице с хх млн записей пройдет по-быстрому?
Вам предложили отрицательные значения и это уже сделано, как я понял. Тогда количество записей в этой таблице приближается к 4.2 млрд, а не к XX миллионам. Если на эту таблицу ссылается другая таблица, то там эта проблема уже решена и это решение, возможно, стоит повторить. Если же на эту таблицу не ссылается другая таблица, то в ней не нужен PK(identity), а достаточно любого кластерного индекса, пусть и неуникального. А рефакторингом решить остальную часть проблемы, например, удаление по условию вместо primary key перевесить на unique constraint. Можно схлопнуть и дырки identity, если там конструктивно +1, а не +10. Хотя работы, возможно, будет несколько больше.
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40114808
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

авторКроме того, есть какой-то кеш
Identity также имеет кэш, но неуправляемый.
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40126234
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknown
Ролг Хупин
в живой таблице с хх млн записей пройдет по-быстрому?
Вам предложили отрицательные значения и это уже сделано, как я понял. Тогда количество записей в этой таблице приближается к 4.2 млрд, а не к XX миллионам. Если на эту таблицу ссылается другая таблица, то там эта проблема уже решена и это решение, возможно, стоит повторить. Если же на эту таблицу не ссылается другая таблица, то в ней не нужен PK(identity), а достаточно любого кластерного индекса, пусть и неуникального. А рефакторингом решить остальную часть проблемы, например, удаление по условию вместо primary key перевесить на unique constraint. Можно схлопнуть и дырки identity, если там конструктивно +1, а не +10. Хотя работы, возможно, будет несколько больше.


Проблема актуальна, потому отвечу: там написано не правильно.
Не забывайте, что записи добавлялись, апдейтились, удалялись, следовательно identity шел к цели делая +1, а реальное количество записей сейчас (я ошибся там на один х) - xxx млн.

Но вопрос остается : как и на что заменить int идентити. который приближается к хэппи энду, но важна длительность операции.
Создать новую таблицу, переекинуть данные и т.д. - вариант, но это будут десятки часов
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40126240
spenov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин,
а если добавить колонку rowversion. или триггер, записывающий какие строки меняли.
запустить процесс создания новой таблицы. а потом проапдейтить те строки, которые поменялись. и перейти быстро на новую таблицу.
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40126241
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Надстроить вьюху, которая union all из старой и новой таблиц, и обращаться к ней. Потом плавно перемещать данные из старой таблицы в новую.
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40126242
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Но вопрос остается : как и на что заменить int идентити. который приближается к хэппи энду, но важна длительность операции.
"На что" - на bigint identity, например. Или на что то ещё.
"Как" - вы вроде писали, что вам понятен метод, как это сделать без остановки сервиса.
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40126243
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений
Ролг Хупин,

Надстроить вьюху, которая union all из старой и новой таблиц, и обращаться к ней. Потом плавно перемещать данные из старой таблицы в новую.


Хмм... вариант интересный, но есть детали: реально там мастер таблица, под ней типа такой структуры

Т1->
T2
T3->
T4

Подчиненные связаны с Т1 по этому идентити полю.
База используется 24 часа в сутки
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40126352
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин
...
Проблема актуальна, потому отвечу: там написано не правильно.
Не забывайте, что записи добавлялись, апдейтились, удалялись, следовательно identity шел к цели делая +1, а реальное количество записей сейчас (я ошибся там на один х) - xxx млн.
...

была такая же проблема + требовали максимальный онлайн
до момента, пока не дали пару дней для переезда на bigint пришлось глумиться:
искал большие разрывы в identity и выставлял новое стартовое значение.
но мне повезло тем, что удаления были массовые миллионами+ записей подряд.
месяц так работало до переделки.
а потом умер клиентский софт, заточенный под знаковый int32, но этот кактус грыз уже не я
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40126353
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
Ролг Хупин,

identity должно побыстрее работать, я так думаю.

ага
тестил народ
...
Рейтинг: 0 / 0
Замена Identity в больших таблицах
    #40126356
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин
...
Хмм... вариант интересный, но есть детали: реально там мастер таблица, под ней типа такой структуры

Т1->
T2
T3->
T4

Подчиненные связаны с Т1 по этому идентити полю.
База используется 24 часа в сутки

Т.е. в подчинённых таблицах тоже близится хеппиенд?
Еще будет забавно искать всю обвязку по коду, которая эту мастер-деталь поддерживает.
Если в процедурах и клиент эти поля связок не видит, то еще есть шанс выжить. А если вшито в клиента - боль.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Замена Identity в больших таблицах
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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