我在ASP.NET MVC/SQL Server上有一个非常受欢迎的网站,不幸的是经常出现死锁。虽然我正在尝试通过SQL分析器找出死锁原因,但我想知道如何更改SQL Server在发生死锁时的默认行为。
是否可以重新运行导致问题的事务,而不是显示错误屏幕?
我在ASP.NET MVC/SQL Server上有一个非常受欢迎的网站,不幸的是经常出现死锁。虽然我正在尝试通过SQL分析器找出死锁原因,但我想知道如何更改SQL Server在发生死锁时的默认行为。
是否可以重新运行导致问题的事务,而不是显示错误屏幕?
Remus的回答存在根本性缺陷。根据 https://dev59.com/h3VD5IYBdhLWcg3wBm5h#112256 ,一致的锁定顺序不能防止死锁。我们所能做的最好的是减少它们发生的频率。
他在两个方面是错误的:
副笔记: Remus的主要观点是数据库无法自动代表您重试操作,在这一点上他是完全正确的。但这并不意味着重新运行操作是对死锁的错误响应。
catch (SqlException ex)
{
if (ex.Number == 1205)
{
// Handle Deadlock by retrying save...
}
else
{
throw;
}
}
declare @errorcount int = 4 -- retry number
while @errorcount >0
begin
begin tran
<your code here>
set @errorcount =0
commit
set @errorcount=@errorcount-1
end