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

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

Есть таблица в почти в 9 млрд. записей размером в 1 Тб. В таблице нужно сменить у одного поля тип с int на bigint. Поле это в кластерном индексе. Железо не очень шустрое.
Как оптимально провести этот маневр:
1) Тупо ALTER COLUMN, убив индекс
2) Создать новое поле bigint и сделать update, убив потом старое.
3)..?
10 янв 14, 09:12    [15394566]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31961
Straga05
Как оптимально провести этот маневр:
Перелить в другую таблицу.
10 янв 14, 09:53    [15394732]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Straga05
Member

Откуда:
Сообщений: 24
alexeyvg
Straga05
Как оптимально провести этот маневр:
Перелить в другую таблицу.

...увеличив размер в момент перелива до 2Тб?
10 янв 14, 10:03    [15394780]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Straga05
увеличив размер в момент перелива до 2Тб?

В любом случае потребуется дополнительное место сравнимое с размером таблицы.
А будет ли это файл данных или журнал транзакций по большому счету все равно.
Я бы лично предпочел выгрузку таблицы во внешний файл. Потом - очистка таблицы, изменение поля, обратная загрузка.
10 янв 14, 10:12    [15394824]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Straga05
Member

Откуда:
Сообщений: 24
А если:
1) в таблице создать ID (Identity) по всем полям,
2) выгрузить только это поле+ID в новую таблицу (объем передаваемых данных существенно меньше)
3) DROP COLUMN c неправильным типом int
4) ADD поле с правильным типом bigint
5) update из таблицы п2.

?
10 янв 14, 10:40    [15395006]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31961
Straga05
...увеличив размер в момент перелива до 2Тб?
По любому придётся.
10 янв 14, 10:40    [15395009]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31961
Straga05
А если:
Понимаете, удвоить занимаемое место придётся для построения кластерного инедкса, это никак не обойти.
10 янв 14, 10:42    [15395015]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
alexeyvg
Straga05
...увеличив размер в момент перелива до 2Тб?
По любому придётся.
Разве метод, предложенный Glory, требует удвоенного места в базе?
10 янв 14, 10:43    [15395024]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31961
Glory
Я бы лично предпочел выгрузку таблицы во внешний файл. Потом - очистка таблицы, изменение поля, обратная загрузка.
Да, вот этот вариант единственный, который не потребует удвоения места в базе. Но потребует место для файла (возможно, это окажется проще, например, файл может быть где то в сети)
10 янв 14, 10:44    [15395031]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Straga05
Member

Откуда:
Сообщений: 24
Экспорт в txt-файл не будет длиться дольше?
10 янв 14, 10:57    [15395118]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Straga05
Экспорт в txt-файл не будет длиться дольше?

Чем транзакция на 9 млрд записей ?
Или чем копирование этих 9 млрд в другую таблицу ?
10 янв 14, 11:03    [15395156]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Straga05
Member

Откуда:
Сообщений: 24
и то, и то.
10 янв 14, 11:13    [15395223]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Straga05
и то, и то.

Ну так поэкспериментируйте
10 янв 14, 11:16    [15395243]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Straga05
Member

Откуда:
Сообщений: 24
Glory
Straga05
и то, и то.

Ну так поэкспериментируйте

Не смешно, отчетность стоит. База остановилась на 29.12.13.
10 янв 14, 11:22    [15395285]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Straga05
Не смешно, отчетность стоит.

Вы хотите, чтобы вам кто-то выдал замеры для абстрактного железа ?
10 янв 14, 11:23    [15395293]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
хмхмхм
Guest
Straga05
Glory
пропущено...

Ну так поэкспериментируйте

Не смешно, отчетность стоит. База остановилась на 29.12.13.


Вы уже на форуме три часа, с момента создания темы. Наверняка за это время, данные перелились бы в другую таблицу.
10 янв 14, 11:26    [15395325]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Ennor Tiegael
Member

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

При любых модификациях данных в таблице запись будет производиться в файл БД и в ее журнал транзакций. При экспорте же во внешний файл в журнал ничего не попадет.

В дальнейшем минимальной нагрузки на журнал можно достичь, используя truncate вместо delete (предварительно грохнув внешние ключи, если нужно) и переведя базу в bulk-logged recovery model (кажется, лучше уточнить в доке).
10 янв 14, 11:28    [15395341]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Straga05
Member

Откуда:
Сообщений: 24
Всем спасибо, буду делать экспорт/испорт.
10 янв 14, 11:37    [15395425]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31961
Straga05
Экспорт в txt-файл не будет длиться дольше?
Вы же писали, что выбора нет, потому что нет место на дисках для увеличения базы?

Я бы не стал утверждать, что нелогируемая загрузка в новую таблицу с готовым кластерным индексом будет медленнее, чем балк через файл. Нужно проверить.
10 янв 14, 12:04    [15395643]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Straga05
Member

Откуда:
Сообщений: 24
Можно найти лишний 1Тб, если развернуть бэкап но другом железе.
Просто нет времени на эксперименты, надо делать что-то.
Правильно сказали, я уже полдня на форуме торчу
10 янв 14, 12:30    [15395791]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
Straga05
alexeyvg
пропущено...
Перелить в другую таблицу.

...увеличив размер в момент перелива до 2Тб?


а ты думаешь alter table не сделает то же самое?

только он еще в дорогах место съест.
а так можно заливать будет пройтись или bcp.
10 янв 14, 12:45    [15395959]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
MX_User
Member

Откуда:
Сообщений: 27
переведите базу в simple или неполное протоколирование, первая уменьшит занимаемое место, второе время на массовую вставку
потом обртно.
А как в int32 9 млрд Вы впихнули ? или дубли в кластерном индексе?
10 янв 14, 13:02    [15396121]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Straga05
Member

Откуда:
Сообщений: 24
MX_User
переведите базу в simple или неполное протоколирование, первая уменьшит занимаемое место, второе время на массовую вставку
потом обртно.
А как в int32 9 млрд Вы впихнули ? или дубли в кластерном индексе?


Там дата+ID_контракта, ежедневные срезы.
Уникальных номеров около 15 млн (нарастает за несколько лет)
10 янв 14, 13:12    [15396191]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Для каких целей потребовалась конвертация в bigint?
10 янв 14, 13:56    [15396543]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимально сменить тип поля в большой таблице?  [new]
Crimean
Member

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

номера кончились
2 ярда мало
а в минус уходить - только временная мера
имхо
10 янв 14, 14:12    [15396680]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить