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

Откуда: Саратов
Сообщений: 775
Товарищи.. подскажите в каком направлении и каким инструментом рыть по поводу причины следующей проблемы.
- блокирование ALTER TABLE L_ NOCHECK CONSTRAINT запросов.
Есть некая база данных, в которой нужно иногда отключать и включать обратно внешние ключи. До недавнего момента это проходило быстро и без проблема. До тех пор пока не уперлось в какую то блокировку. Причем это касается все таблицы в базе данных, где есть внешние ключи.
- запросы типа
ALTER TABLE L_DOC_VAL71 NOCHECK CONSTRAINT all
"зависают".
Подскажите, как там можно отпрофайлить, - что вызывает блокировку?
Спасибо.
15 янв 14, 15:20    [15419187]     Ответить | Цитировать Сообщить модератору
 Re: Блокирование NOCHECK CONSTRAINT запросов  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
select * from sys.dm_os_waiting_tasks where wait_type = N'LCK_M_SCH_M';

Покажет все сеансы, ожидащие возможности наложить блокировку модификации схемы. Там же увидите какой сеанс блокирует.
15 янв 14, 15:49    [15419459]     Ответить | Цитировать Сообщить модератору
 Re: Блокирование NOCHECK CONSTRAINT запросов  [new]
McCar
Member

Откуда: Саратов
Сообщений: 775
invm
select * from sys.dm_os_waiting_tasks where wait_type = N'LCK_M_SCH_M';

Покажет все сеансы, ожидащие возможности наложить блокировку модификации схемы. Там же увидите какой сеанс блокирует.

Как дальше трактовать полученную информацию?
Допустим показало что да, есть блокировка, и для нее
resource_description=
"objectlock lockPartition=15
objid=1310627712
subresource=FULL
dbid=7
id=lock341deeb80
mode=Sch-S
associatedObjectId=1310627712"

Что дальше смотреть?
15 янв 14, 16:16    [15419751]     Ответить | Цитировать Сообщить модератору
 Re: Блокирование NOCHECK CONSTRAINT запросов  [new]
McCar
Member

Откуда: Саратов
Сообщений: 775
Вдогонку
- посмотрел по ObjID, - это оказалась таблица S_TREE, - то есть таблица на которую ссылаются все эти внешние ключи..
И.. что с ней такого могло произойти, что она заблокировало отмену внешних ключей на себя?
15 янв 14, 16:23    [15419828]     Ответить | Цитировать Сообщить модератору
 Re: Блокирование NOCHECK CONSTRAINT запросов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
McCar
И.. что с ней такого могло произойти, что она заблокировало отмену внешних ключей на себя?
Посмотрите активные процессы и транзакции. Если одна таблица, то она может быть постоянно залочена на изменение схемы запросами.
15 янв 14, 16:29    [15419873]     Ответить | Цитировать Сообщить модератору
 Re: Блокирование NOCHECK CONSTRAINT запросов  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
McCar
Что дальше смотреть?

invm
Там же увидите какой сеанс блокирует.
15 янв 14, 16:31    [15419898]     Ответить | Цитировать Сообщить модератору
 Re: Блокирование NOCHECK CONSTRAINT запросов  [new]
McCar
Member

Откуда: Саратов
Сообщений: 775
alexeyvg
McCar
И.. что с ней такого могло произойти, что она заблокировало отмену внешних ключей на себя?
Посмотрите активные процессы и транзакции. Если одна таблица, то она может быть постоянно залочена на изменение схемы запросами.

Схема не меняется у теблицы S_TREE. Схема меняется у других таблиц, которые ссылаются на S_TREE.
При этом запросы к таблице S_TREE действительно идут постоянно, но к таблицам, на которых меняется схема, запросов нет.
15 янв 14, 17:22    [15420318]     Ответить | Цитировать Сообщить модератору
 Re: Блокирование NOCHECK CONSTRAINT запросов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Не понимаю что здесь непонятного.
Если на тебя ссылаются, то при изменении / удалении данных нужно все эти связи перепроверить.
Т.е. планы запросов к S_TREE нужно изменить, добавить пункт по проверке существования записи или явное их изменение - в зависимости от свойств этих связей.
Естественно чтобы этого добиться нужно чтобы все запросы со старыми планами закончили свою работу.

Если вы утверждаете что у вас нет операций UPDATE / DELETE для таблицы S_TREE, явных или косвенных, то тут дело в сложности механизма "учесть всё и не накосячить", поэтому MS возможно где-то излишне перестраховывается. Но это не так очевидно, как может показаться.
16 янв 14, 02:37    [15422374]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить