8

我不确定在哪里可以使用

SET DEADLOCK_PRIORITY...

我的存储过程中的命令。是否需要在我开始交易之前进行?或者它可以在交易中的任何地方?

谢谢大家!

4

1 回答 1

12

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

尽管更好的解决方案可能是尽可能避免死锁

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

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
于 2013-05-17T14:27:25.167 回答