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

Откуда: ьщы
Сообщений: 507
кооллеегги, вот эта процедура при параллельном запуске с собой же.
вызывает взаимоблокировку.
подскажите как избежать её.

блок
where id =
(...

убрать не могу, т.к. он обеспечивает для меня нужный порядок выдачи .

ALTER proc [dbo].[web_col_2_get_next_link] 
(
@GroupName nvarchar(50)
)
as
declare @ID nvarchar(50)
declare @url nvarchar(max)

UPDATE TOP (1) 
web_col_2_link 
SET @ID = convert(nvarchar(max), isnull( id,''))
,@url =convert(nvarchar(max), isnull( url,''))
,status = '2-Download In Process'
where id =
(
	select top (1) id from (
		select
			id
			,id as order_id
			,url
			from web_col_2_link
			where group_name = @GroupName
			and status = '1-New'
			and level in (0,1)
		union
		select
			id
			,parent_id as order_id
			,url
			from web_col_2_link
			where group_name = @GroupName
			and status = '1-New'
			and level in (2)
	)T1
	order by order_id asc
)

set @ID = ISNULL(@ID,'HAVE_NO_RECORDS')
select @ID,@url
22 окт 12, 20:59    [13358932]     Ответить | Цитировать Сообщить модератору
 Re: дедлоки + дурная голова, ногам покоя не даёт.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
			
			update top (1) from link
			 set 
			    .......... 
			from web_col_2_link  link
			   inner join (
			    select TOP (1) tmp.id from 
			    (
			         select 
			                id
			                ,order_id  =
			                    case 
			                      when  level  = 2
			                        then parent_id
			                      else id
			                    end    
			        from web_col_2_link
			        where group_name = @GroupName
			        and status = '1-New'
			        and level in (0,1,2)
			    ) tmp
			   order by tmp.order_id asc 
			   
			   ) x on x.id = link.id
                     where link.group_name = @GroupName
22 окт 12, 21:16    [13358986]     Ответить | Цитировать Сообщить модератору
 Re: дедлоки + дурная голова, ногам покоя не даёт.  [new]
деморализованная структура
Guest
sp_eedo
убрать не могу, т.к. он обеспечивает для меня нужный порядок выдачи.

замени на код, который обеспечивает тот же "порядок выдачи" и при этом не такой ужасный.
код кошмарный. не нужен ни юнион, ни подзапрос.

денормализованная полностью текстовая структура "характерная" для mysql каким образом в сиквеле оказалась?
22 окт 12, 21:16    [13358990]     Ответить | Цитировать Сообщить модератору
 Re: дедлоки + дурная голова, ногам покоя не даёт.  [new]
ChA
Member

Откуда: Москва
Сообщений: 11317
sp_eedo
блок
where id =
(...

убрать не могу, т.к. он обеспечивает для меня нужный порядок выдачи .
Что это значит ? Звучит абсолютно бредово. Впрочем, код выглядит так же. Рекомендуется сосредоточиться и пояснить, какую задачу решаете. Только внятно, пожалуйста, а не так как выше.
23 окт 12, 04:45    [13359899]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить