Pau*_*chs 3 t-sql azure azure-sql-database
我知道这个问题在这里被问到但是1)它相对较老而且2)它对我没什么帮助.
我遇到了相对大量的死锁,我的数据库上有一些操作.设置如下:
表:
表A带有外键到表B.
操作:
插入表A
插入表B
更新表B中的行
删除表B中的行
删除表A中的行
问题:
这些操作基本上可以以任何顺序发生,因为我有多个工作者角色,因此这些操作必须是幂等的,但是,每个工作者角色将使用表A中的不同主键.我仍然试图绕过概念锁定表,从我的理解,A上的任何删除将首先锁定表B,删除相关的行,然后从A中删除行.我目前假设这是一个原子操作,没有时间执行额外的锁定锁定表B和锁定表A,因为我无法想象一种解决方法.
我目前能够在以下格式的microsoft visual studio中捕获异常:
事务(进程ID xxx)在锁资源上与另一个进程发生死锁,并被选为死锁牺牲品.重新运行该交易.
这种异常似乎可能发生在任何上述操作上.
我的问题是:我如何知道哪些锁/事务导致死锁?有没有人知道我们得到异常后会有用的任何查询?
sys.event_log就是这里的答案.
它存在于服务器的masterdb中,并且应该包含一个条目,其中包含您的数据库在过去一个月中遇到的所有死锁图.
有了僵局图,有很多关于sql server 死锁图调试的教程.