我不确定在哪里可以使用
SET DEADLOCK_PRIORITY...
我的存储过程中的命令。在开始交易之前是否需要?或者它可以在交易的任何地方吗?
全部谢谢!
答案 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