我在哪里可以在我的存储过程中设置DEADLOCK_PRIORITY?

时间:2013-05-16 19:46:31

标签: sql-server-2008 stored-procedures deadlock

我不确定在哪里可以使用

SET DEADLOCK_PRIORITY...
我的存储过程中的

命令。在开始交易之前是否需要?或者它可以在交易的任何地方吗?

全部谢谢!

1 个答案:

答案 0 :(得分:8)

我不确定我是否理解这个问题:您可以随时随地更改优先级。如果你不确定那么你可以把它放在程序的开头,除非它可能是一个非常长的过程,并且只有一个特定的查询容易出现死锁。

虽然如果可能的话,更好的解决方案可能是avoid the deadlock

您可能还需要注意,当过程退出时,存储过程中的任何优先级更改都会重置为调用会话的优先级:

set deadlock_priority high
go
select deadlock_priority from sys.dm_exec_sessions where session_id = @@spid
go

create proc dbo.p 
as
begin
select deadlock_priority as 'PriorityBefore' from sys.dm_exec_sessions where session_id = @@spid 
set deadlock_priority low
select deadlock_priority as 'PriorityAfter' from sys.dm_exec_sessions where session_id = @@spid 
end
go

exec dbo.p

select deadlock_priority from sys.dm_exec_sessions where session_id = @@spid

drop proc dbo.p
go

set deadlock_priority normal
go