Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
Павел677
Member

Откуда:
Сообщений: 17
Добрый день всем.

Можете помочь с проблемой долгого добавления колонки в табличку с 24 млн записей, ограничением NOT NULL и дефолтным значением '' ?

SQL Server 2016

Погуглил, сходу ничего простого не нашлось.
Только сложные варианты
http://qaru.site/questions/109057/how-do-you-add-a-not-null-column-to-a-large-table-in-sql-server

Я раньше работал с ораклом, там в 9-й версии была такая же проблема.
Начиная с версии 10 добавление происходит очень быстро, буквально за секунды.

Как пояснял мне админ, там при добавлении столбца с ограничением NOT NULL и дефолтным значением, значением не пишется во все записи, а хранится в определении таблички и из-за этого удается достичь такого ускорения. Это было очень удобно.


Я подумал, неужели в SQL Server к 2016-й версии не изобрели что-то аналогичное ?
23 май 19, 12:34    [21891785]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Павел677,

версия конкретно?
23 май 19, 12:35    [21891787]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
не важно, только в enterprise

автор
Starting with SQL Server 2012 (11.x) Enterprise Edition, adding a NOT NULL column with a default value is an online operation when the default value is a runtime constant. This means that the operation is completed almost instantaneously despite the number of rows in the table. Because, the existing rows in the table aren't updated during the operation. Instead, the default value is stored only in the metadata of the table and the value is looked up, as needed, in queries that access these rows. This behavior is automatic. No additional syntax is required to implement the online operation beyond the ADD COLUMN syntax.
23 май 19, 12:43    [21891796]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Павел677,

а куда вы торопитесь? Речь-то, всё-таки, идёт о разовом изменении структуры.
Пока вы ждёте здесь ответа, поле в таблицу уже давно бы добавилось, а?
23 май 19, 12:43    [21891797]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
Павел677
Member

Откуда:
Сообщений: 17
select @@version
выдает
Microsoft SQL Server 2016 (SP2-CU5) (KB4475776) - 13.0.5264.1 (X64) Jan 10 2019 18:51:38 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)


Запрос думал 726 секунд. Но это похоже и-за того что сервак мощный.
На деве/тесте будут слезы на 1-2 часа.
23 май 19, 12:44    [21891799]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
Павел677
Member

Откуда:
Сообщений: 17
[quot TaPaK]не важно, только в enterprise

Спасибо за отклик.
Попробовал с той же табличкой в Enterprise версии, все сработало мгновенно.

Не ожидал такой подставы.
Вопрос закрыт.

P.S.
А для стандарт версии есть какие-нить обходные способы ?
23 май 19, 12:55    [21891818]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
Павел677
Member

Откуда:
Сообщений: 17
iap
Павел677,

а куда вы торопитесь? Речь-то, всё-таки, идёт о разовом изменении структуры.
Пока вы ждёте здесь ответа, поле в таблицу уже давно бы добавилось, а?


На нашем проекте это не такая редкая ситуация. Плюс в момент таких изменений весь SQL как бы фризится. С ним становится невозможно работать и никто из разработчиков в деве не может работать. В общем, отдел разработки уходит курить на 1-2 часа.
23 май 19, 12:57    [21891824]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
invm
Member

Откуда: Москва
Сообщений: 9265
Павел677
А для стандарт версии есть какие-нить обходные способы ?
Добавить столбец как null.
Проапдейтить порциями.
Сделать столбец not null

А разработчиков перевести на Developer Edition
23 май 19, 13:04    [21891833]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
sti
Member

Откуда:
Сообщений: 769
invm
Павел677
А для стандарт версии есть какие-нить обходные способы ?
Добавить столбец как null.
Проапдейтить порциями.
Сделать столбец not null

А разработчиков перевести на Developer Edition


+1
Ну или запустить скрипт в джобе ночью, когда ваши разработчики спят.
23 май 19, 13:59    [21891910]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Павел677
iap
Павел677,

а куда вы торопитесь? Речь-то, всё-таки, идёт о разовом изменении структуры.
Пока вы ждёте здесь ответа, поле в таблицу уже давно бы добавилось, а?


На нашем проекте это не такая редкая ситуация. Плюс в момент таких изменений весь SQL как бы фризится. С ним становится невозможно работать и никто из разработчиков в деве не может работать. В общем, отдел разработки уходит курить на 1-2 часа.

вопрос зачем девам стандарт не ясен :)
ну и сервер не для личной разработки желательно лучше калькулятора
23 май 19, 14:03    [21891925]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
sti
invm
пропущено...
Добавить столбец как null.
Проапдейтить порциями.
Сделать столбец not null

А разработчиков перевести на Developer Edition


+1
Ну или запустить скрипт в джобе ночью, когда ваши разработчики спят.
Вот, например, у нас если спят в Москве, то работать начинают где-нибудь в Америке.
Или на Дальнем Востоке. Разные бывают ситуации.
23 май 19, 14:12    [21891954]     Ответить | Цитировать Сообщить модератору
 Re: Быстро добавить колонку в большую табличку SQL Server 2016 с дефолтным значением  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
iap
sti
пропущено...


+1
Ну или запустить скрипт в джобе ночью, когда ваши разработчики спят.
Вот, например, у нас если спят в Москве, то работать начинают где-нибудь в Америке.
Или на Дальнем Востоке. Разные бывают ситуации.

тогда страдать должны те, чьё рабочее время дешевле.
или те, у кого производительность ниже
это если исключить более разумные варианты :)
23 май 19, 14:42    [21892051]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить