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

Откуда:
Сообщений: 4
Добрый день!
Возникла следующая проблема: имееться таблица Table1(порядка 10 млн. записей). Стоит задача параллельно обрабатывать данные в 2-х и более одновременно работающих сессиях. В процессе обработки 2 процесса обращаются к таблице Table1 со следующими запросами
DELETE FROM TABLE1
WHERE FIELD1 = 'А'

DELETE FROM TABLE1
WHERE FIELD1 = 'В'

Запросы должны удалить порядка 1 млн. записей каждый.
В результате возникает ошибка:
Транзакция (идентификатор процесса 57) вызвала взаимоблокировку ресурсов блокировка с другим процессом и стала жертвой взаимоблокировки. Запустите транзакцию повторно.

Не подскажите как можно избежать взаимоблокировки? Индекс по полю Field1 есть. Версия MS SQL2008 R2
4 окт 11, 19:18    [11384400]     Ответить | Цитировать Сообщить модератору
 Re: delete и взаимоблокировки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Граф дедлока давайте.
4 окт 11, 19:36    [11384468]     Ответить | Цитировать Сообщить модератору
 Re: delete и взаимоблокировки  [new]
iljy
Member

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

для начала надо получить граф взаимоблокировки. А потом по обстоятельствам.
4 окт 11, 19:37    [11384472]     Ответить | Цитировать Сообщить модератору
 Re: delete и взаимоблокировки  [new]
aleks2
Guest
avrdv
Не подскажите как можно избежать взаимоблокировки? Индекс по полю Field1 есть.


А я и так скажу: "Индекс по полю Field1" и есть причина дедлока.
4 окт 11, 19:52    [11384504]     Ответить | Цитировать Сообщить модератору
 Re: delete и взаимоблокировки  [new]
avrdv
Member

Откуда:
Сообщений: 4
Lock:Deadlock Chain
Parallel query worker thread was involved in a 23156

Это оно?
Извиняюсь, я недавно работаю с MS SQL
4 окт 11, 19:58    [11384516]     Ответить | Цитировать Сообщить модератору
 Re: delete и взаимоблокировки  [new]
avrdv
Member

Откуда:
Сообщений: 4
aleks2
avrdv
Не подскажите как можно избежать взаимоблокировки? Индекс по полю Field1 есть.


А я и так скажу: "Индекс по полю Field1" и есть причина дедлока.


Т.е. нужно просто удалить индекс?
4 окт 11, 19:59    [11384518]     Ответить | Цитировать Сообщить модератору
 Re: delete и взаимоблокировки  [new]
iljy
Member

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

ФАК - Как получить граф дедлока в текстовом виде?
4 окт 11, 20:15    [11384561]     Ответить | Цитировать Сообщить модератору
 Re: delete и взаимоблокировки  [new]
avrdv
Member

Откуда:
Сообщений: 4
iljy
avrdv,

ФАК - Как получить граф дедлока в текстовом виде?


Спасибо.

Сделал как написано в ФАК, перезапустил скуль и оба запроса отработали вместе за 2 минуты без блокировок...
4 окт 11, 20:53    [11384698]     Ответить | Цитировать Сообщить модератору
 Re: delete и взаимоблокировки  [new]
Glory
Member

Откуда:
Сообщений: 104751
avrdv
Спасибо.

Сделал как написано в ФАК, перезапустил скуль и оба запроса отработали вместе за 2 минуты без блокировок...

Мда
В ФАК дан способ получения графа взаимоблокировок. А способ их предотвращения на всем сервере.
Нельзя глобально отключить взаимоблокировки. Потому что они есть результат вашего программного кода
5 окт 11, 09:27    [11385760]     Ответить | Цитировать Сообщить модератору
 Re: delete и взаимоблокировки  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
avrdv
Lock:Deadlock Chain
Parallel query worker thread was involved in a 23156

Это оно?
Извиняюсь, я недавно работаю с MS SQL


неа, не оно... граф скорее всего пишется в лог MSSQL - там и ищите... его структура сразу заметна, если знать как она выглядит - бросается в глаза так сказать
5 окт 11, 09:28    [11385762]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить