tsi*_*ilb 9 sql sql-server deadlock
据我所知,当SPID忙于处理另一个查询时会发生SQL死锁,而且由于它现在非常繁忙而无法再运行另一个查询.SQL Server"随机"选择其中一个查询从请求的资源中解锁,并将其取消,抛出异常.
我有一个应用程序运行~40个实例和一个后端Windows服务,所有这些都在同一个数据库中.我希望减少死锁,这样我就可以增加可以同时运行的线程数.
Tom*_*m H 20
您对死锁的理解不正确.你所描述的是封锁.将两者等同起来是一个常见的错误.
当两个单独的事务每个都需要不同的资源时,就会发生死锁,并且它们都不会释放它们拥有的那个以便另一个可以运行.它可能更容易说明:
SPID#1获取资源锁定SPID#2获取资源B锁定SPID#1现在需要锁定资源B才能完成SPID#2现在需要锁定资源A才能完成
SPID#1无法完成(因此释放资源A),因为SPID#2有SPID#2无法完成(因此发布资源B),因为SPID#1有它
由于SPID都不能完成,因此必须放弃(即由服务器选择作为死锁受害者)并且将失败.
避免它们的最佳方法是保持交易量小(需要的资源数量)并且快速.