如何配置azure SQL死锁?

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)在锁资源上与另一个进程发生死锁,并被选为死锁牺牲品.重新运行该交易.

这种异常似乎可能发生在任何上述操作上.

我的问题是:我如何知道哪些锁/事务导致死锁?有没有人知道我们得到异常后会有用的任何查询?

Bri*_*aro 5

sys.event_log就是这里的答案.

它存在于服务器的masterdb中,并且应该包含一个条目,其中包含您的数据库在过去一个月中遇到的所有死锁图.

有了僵局图,有很多关于sql server 死锁图调试的教程.