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

Откуда:
Сообщений: 7868
Блог
Всем привет.

Столкнулся со следующей проблемой.

Есть некая таблица (см. вложение) в этой таблице построено ограничение на уникальность ParentId, т.е. в таблице может находиться только один ребёнок своего родителя.
В эту и другие таблицы с огромного количества потоков пакетно льётся повторяющаяся информация о детях и их родителях.
Если не ставить ограничения на уникальность, в текущей реализации возможны дубли (т.к. вставка идёт delete по ParentId + insert). Если выставить уникальность, то либо может не записаться одна из версий (падение по уникальности) в случае грязного чтения, либо попадаем на дедлок в случае повышения уровня изоляции. Такие же дедлоки возникают, в случае если вставка идёт через update, т.к. транзакции блокируют строки, которые могут пересекаться в нескольких одновременно исполняющихся пакетах.

Кто-нибудь может подсказать как можно решить подобную задачу?

К сообщению приложен файл. Размер - 2Kb
26 мар 13, 10:36    [14095483]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на уникальность  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37228
Ну граф дедлока покажите, что ли.
26 мар 13, 12:04    [14096042]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на уникальность  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Хнык
Есть некая таблица (см. вложение) в этой таблице построено ограничение на уникальность ParentId

А можно то же самое показать не картинкой, а DDL-скриптом? Так оно привычнее :-)

Хнык
...вставка идёт delete по ParentId + insert...
...в случае грязного чтения...
Такие же дедлоки возникают, в случае если вставка идёт через update...

А это хотелось бы увидеть в виде DML-скриптов...
26 мар 13, 12:25    [14096150]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на уникальность  [new]
Хнык
Member

Откуда:
Сообщений: 7868
Блог
Снизили уровень транзакции, отсортировали команды в пакете по кластерному индексу, убрали повторное исполнение, переписали на мёрджи. Количество дедлоков снизилось.
28 мар 13, 12:24    [14106446]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить