Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Привет.
Насколько вообще нормально в каждой процедуре, которая оперирует более менее большими блоками данных (уставляет-удаляет) отключать констреинты ?

Бывает что процедуре приходится лопатить по 500 записей, а бывает и по 20000. Это зависит от бизнес сущности (огромный отчет, но не суть) - может прилететь маленькая, а может большая.

Т.е. это хак и повод переделать таблицы, или нормально так делать ?
21 апр 16, 19:59    [19090479]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ну если она включает все констрейнты обратно и происходит это все в одной транзакции и производительность всех устраивает, то... Нет, все равно лажа какая-то.

Сообщение было отредактировано: 21 апр 16, 20:04
21 апр 16, 20:04    [19090496]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
iljy
Member

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

если это запускаемая глубокой ночью, когда все потребители спят, массовая загрузка, то нормально, а делать так постоянно - это хрень какая-то.
21 апр 16, 20:06    [19090500]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Без этого, все тормозит :(

Вот я по этому поводу еще темку создал 19090510
21 апр 16, 20:12    [19090514]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
iljy
ProBiotek,

если это запускаемая глубокой ночью, когда все потребители спят, массовая загрузка, то нормально, а делать так постоянно - это хрень какая-то.


А почему хрень то ? Это не дает работать пользователям параллельно ?
21 апр 16, 20:13    [19090516]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
LoopN
Guest
Главное не забыть обратно правильно включить.

Т.к. если использовать
[src]ALTER TABLE CHECK CONSTRAINT ALL
[/SRC]
могут быть проблемы, т.к. сервер перестает верить CONSTRAINT
select is_not_trusted  --1 перестал верить, 0 все норм
from sys.check_constraints
where object_id=OBJECT_ID('[constrname]')

нужно включать примерно так:
ALTER TABLE WITH CHECK CHECK CONSTRAINT ALL
21 апр 16, 20:15    [19090519]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
LoopN,

Ужос :)



Кстати вопрос. А что произойдет, если после отключения констреинтов произойдет исключение ? Если забыть в обработчике исключений включить назад констреинты, то они так и окажутся отключенными ?
21 апр 16, 20:16    [19090525]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
ProBiotek,

в транзакции отвалится и всё
21 апр 16, 20:26    [19090550]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
ProBiotek
Привет.
Насколько вообще нормально в каждой процедуре, которая оперирует более менее большими блоками данных (уставляет-удаляет) отключать констреинты ?
Т.е. это хак и повод переделать таблицы, или нормально так делать ?

Не, ну если после операции делать ALTER TABLE WITH CHECK CHECK CONSTRAINT ALL думаю что проверка оставшихся данных перекроет весь хак от отключения констрейнтов. И если их постоянно включать и выключать может быть они нафиг не нужны?
21 апр 16, 20:45    [19090609]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
iljy
Member

Откуда:
Сообщений: 8711
ProBiotek
А почему хрень то ? Это не дает работать пользователям параллельно ?


Ну хотя бы поэтому, да, блокировка SchM вещь суровая и беспощадная. Но главное - нафига вообще нужны такие ограничения, которые постоянно приходится отключать?
21 апр 16, 21:07    [19090672]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
iljy
ProBiotek
А почему хрень то ? Это не дает работать пользователям параллельно ?


Ну хотя бы поэтому, да, блокировка SchM вещь суровая и беспощадная. Но главное - нафига вообще нужны такие ограничения, которые постоянно приходится отключать?
Sch-M -- это первая половина беды. Вторая половина беды -- однопоточный скан всей таблицы на каждый включаемый чек под аккомпанемент Sch-M.

Хотя, может, если все сразу включать, скан будет один. Но от этого не легче.

Сообщение было отредактировано: 21 апр 16, 22:25
21 апр 16, 22:04    [19090805]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гавриленко Сергей Алексеевич
Sch-M -- это первая половина беды. Вторая половина беды -- однопоточный скан всей таблицы на каждый включаемый чек под аккомпанемент Sch-M.

Это тоже, да, чеки потом ведь возвращать надо.
21 апр 16, 22:06    [19090811]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гавриленко Сергей Алексеевич,

хотя если уж извращаться, то можно WITH NOCHECK их включать, может на побочные эффекты можно наплевать.
21 апр 16, 22:17    [19090851]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
iljy
Гавриленко Сергей Алексеевич,

хотя если уж извращаться, то можно WITH NOCHECK их включать, может на побочные эффекты можно наплевать.
"Включать" -- это WITH CHECK же.
21 апр 16, 23:53    [19091067]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE NOCHECK CONSTRAINT ALL. Насколько вообще нормально в каждой процедуре ?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гавриленко Сергей Алексеевич,

по нормальному да, но можно извратиться и сделать WITH NOCHECK CHECK. Нормальные люди так не делают, но если очень хочется...
22 апр 16, 01:51    [19091180]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить