我一直在抓住这个僵局:
[Enlarge]
IX_OrderAmounts是一个在Amount表上进行聚合的索引视图。左侧的事务(可重复读取 - 尽管与Read commited相同)仅在Amount表中插入一行。右侧的事务(Read committed)从Amount表中更新几行(2 - 3行)(所有在一个UPDATE语句中)。
现在我不知道的是为什么左边的事务只需要插入一行就需要获得第二次更新锁。
因为死锁是在我没有直接更新的索引视图上,所以我不能真正使用SQL提示(或者至少我不知道如何)。
如何解决此死锁?
答案 0 :(得分:2)
您可以用来解决死锁的典型方法包括:
保持交易尽可能短。
在SQL Server中,您还可以使用以下任一方法最小化锁定争用,同时保护事务免受未提交数据修改的脏读:
加载SQL事件探查器,重点关注锁定,启动专门针对该数据库的死锁脚本并将其提供给数据库引擎优化顾问,并查看建议。
<强>脚注强>: http://support.microsoft.com/kb/832524
[[1]:http://support.microsoft.com/kb/832524
http://www.codeproject.com/Articles/42547/SQL-SERVER-How-To-Handle-Deadlock
之前的Stackoverflow锁定问题how to solve deadlock problem?