在SQL Server, 死结的发生是因为有两个或多个工作(processes) 正在互相等待彼此所保留锁着的资源,而造成工作永久封锁彼此的情况。当deadlock 发生时, SQL Server 会自行选择其中一个工作作为牺牲者,以错误来结束其交易。如下。
一般来讲, DBA 会开启设定trace flag (1222) 来搜集deadlock 的信息,以便分析deadlock 的发生。另外一个方法就是使用扩充事件(Extended Events) 的system_health 工作阶段(Sessions) 来查询deadlock 的发生原因。如下。
点选xml,就可以查询到死结发生的原因。