Man*_*ion 5 deadlock stored-procedures sql-server-2008
我不确定我可以在哪里使用
SET DEADLOCK_PRIORITY...
Run Code Online (Sandbox Code Playgroud)
我的存储过程中的命令.在开始交易之前是否需要?或者它可以在交易的任何地方?
谢谢大家!
我不确定我理解这个问题:你可以随时随地改变优先级.如果你不确定那么你可以把它放在程序的开头,除非它可能是一个非常长的过程,并且只有一个特定的查询容易出现死锁.
虽然更好的解决方案可能是尽可能避免死锁.
您可能还需要注意,当过程退出时,存储过程内的任何优先级更改都将重置为调用会话的优先级:
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
Run Code Online (Sandbox Code Playgroud)