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

Откуда:
Сообщений: 49
Добрый день! Есть табличка с задачами на выполнение. Задачи объединены в батчи:

Картинка с другого сайта.

Есть процессы, которые забирают себе задачи с пустым полем PROCESS , делают это часто и параллельно, причем берут сразу целый батч и проставляют номер процесса. При этом стараются, чтоб в этом батче оказалась самая старая задача из всех свободных. Как написать запрос, проставляющий номера процессов, чтоб не возникало deadlock?
А еще лучше сразу возвращающий выбранные задачи, если это возможно.

Пробовал так:
UPDATE TBL
SET PROCESS = @PROCESS
WHERE BATCH_ID = (SELECT TOP 1 BATCH_ID
					FROM TBL
					WHERE PROCESS IS NULL
					ORDER BY CREATED ASC)
OUTPUT INSERTED.*
INTO @OUTPUT_TABLE;

Возникают дедлоки.
Спасибо.
22 фев 14, 01:05    [15609226]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Эта задача раз 5ть обсуждалась.
А не с sqlex это случаем?
Т.к. такая задача сразу выводит на понимание сути вещей, то явно задаётся для обучения.
Предлагаю тему прикрыть. Согласному тому же принципу что и sqlex.
22 фев 14, 05:48    [15609854]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
aleks2
Guest
forrfor
Пробовал так:
UPDATE TBL
SET PROCESS = @PROCESS
WHERE BATCH_ID = (SELECT TOP 1 BATCH_ID
					FROM TBL
					WHERE PROCESS IS NULL
					ORDER BY CREATED ASC)
OUTPUT INSERTED.*
INTO @OUTPUT_TABLE;

Возникают дедлоки.
Спасибо.


О брешет то, это ж даже исполняться не будет.
22 фев 14, 07:45    [15609877]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
aleks2
Guest
А по делу - нефиг херней страдать.
Блокируете батчи целиком => отдельная таблица батчей и ОДНА строка-блокировка на батч.
22 фев 14, 07:48    [15609878]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
forrfor
Member

Откуда:
Сообщений: 49
aleks2
А по делу - нефиг херней страдать.
Блокируете батчи целиком => отдельная таблица батчей и ОДНА строка-блокировка на батч.

А как тогда будет выглядеть блокировка одной записи в таблице батчей с учетом самой старой задачи в таблице задач?
22 фев 14, 11:13    [15610075]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
aleks2
Guest
forrfor
aleks2
А по делу - нефиг херней страдать.
Блокируете батчи целиком => отдельная таблица батчей и ОДНА строка-блокировка на батч.

А как тогда будет выглядеть блокировка одной записи в таблице батчей с учетом самой старой задачи в таблице задач?

А в чем вы усматриваете проблему?
22 фев 14, 14:35    [15610538]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
aleks2
Блокируете батчи целиком => отдельная таблица батчей и ОДНА строка-блокировка на батч.
aleks2, в итоге мнесто того чтобы поддерживать нормальный процесс обучения, чтобы студент думал самостоятельно, а так мы приучаем человека вешаться на шею другим.

Хотя согласен, уже поздно, если человек бежит за помощью при обучении - хамба. Нормальный человек всегда рьяно сам старается решить всегда.
И это не исправить к величайшему сожалению.
Форум для профессионалов. Любых нубов или школяров гнать в шею.
IMXO
23 фев 14, 01:26    [15613257]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
aleks2
Guest
Mnior
Форум для профессионалов. Любых нубов или школяров гнать в шею.
IMXO

Ты слишком суров.
23 фев 14, 10:28    [15613844]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
shalomb
Member

Откуда: Израиль
Сообщений: 77
Add with(nolock) for tbl
23 фев 14, 18:16    [15615250]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
aleks2
Guest
shalomb
Add with(nolock) for tbl


Ну да, блокировки придумали неверные.
И дело чести для каждого истинного иудея смачно плюнуть в их сторону.
23 фев 14, 19:37    [15615500]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
А как называется явление когда полный нуб врывается в пост и пишет полную ахинею?
aleks2
Ты слишком суров.
Косвенно согласились с позицией?

А может более гуманен?
Плевать на жизнь людей ради "показа знаний" или "топик обязан быть отвечен" или ещё каких-то оправданий?
А как тут показаться не "слишком" суровым? Вот приведите вариант "правильного отношения к проблеме" и "правильного решения ситуации".
Что значит "слишком" суровый? А "суровый" это плохо? А что значит "суровый"?

Может просто слишком эмоционально рассматриваются мои слова? Непривычно встречать позицию на просторах инета?
Ведь сюсюканье это не просто стиль поведения, а что-то "значащее по смыслу"?
Вообще-то для большей привязанности нужно проводить обе крайние стороны эмоций. Если вы как-то затрагиваете эту тему.
23 фев 14, 21:43    [15615952]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
forrfor
Member

Откуда:
Сообщений: 49
aleks2
А по делу - нефиг херней страдать.
Блокируете батчи целиком => отдельная таблица батчей и ОДНА строка-блокировка на батч.

Сделал, как Вы сказали и счастлив. Спасибо!
25 фев 14, 00:31    [15623191]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
forrfor
Member

Откуда:
Сообщений: 49
Mnior
А как называется явление когда полный нуб врывается в пост и пишет полную ахинею?

Я не врывался в пост, я его создал. Или я Вас не так понял?

Спасибо Вам тоже, я подумал над Вашими идеями.
25 фев 14, 00:38    [15623206]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать Deadlock в это ситуации?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
forrfor
Mnior
А как называется явление когда полный нуб врывается в пост и пишет полную ахинею?
Я не врывался в пост, я его создал. Или я Вас не так понял?
Да, к сожалению не так, вы тут совершенно не причём.

А вообще я просто спросил, ибо очень часто такой неадекват происходит, а как выразить коротко, подобрать яркий образ - не силён.
25 фев 14, 01:30    [15623290]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить