我知道这里有人问过这个问题,但 1)它相对较旧,2)它对我没有多大帮助。
在我的数据库上进行一些操作时,我遇到了相对大量的死锁。设置如下:
表:
将外键放入表 B 中的表 A。
操作:
插入表 A
插入表 B
更新表 B 中的行
删除表 B 中的行
删除表 A 中的行
问题:
这些操作基本上可以按任何顺序发生,因为我有多个工作角色,因此这些操作必须是幂等的,但是,每个工作角色将使用表 A 中的不同主键。我仍在尝试围绕锁定表,据我了解,A 上的任何删除都将首先锁定表 B,在那里删除相关行,然后从 A 中删除该行。我目前认为这是一个原子操作,没有时间在两者之间执行额外的锁锁定表 B 和锁定表 A,因为我无法想象一种解决方法。
我目前能够在以下格式的 Microsoft Visual Studio 中捕获异常:
事务(进程 ID xxx)与另一个进程在锁资源上死锁,并已被选为死锁牺牲品。重新运行事务。
此异常似乎可能发生在上述任何操作中。
我的问题是:我怎么知道哪些锁/事务是导致死锁的?有谁知道在我们得到异常后任何有用的查询?