首页 > 解决方案 > TSQL - 解决死锁

问题描述

我有一个随机挂断的 SQL Server 代理作业(执行存储过程)。

这次在进程被杀死之前,我运行sp_who2并注意到具有相同 SPID 的多个记录(1 = 正在运行,所有其他记录 = 挂起)。这是由于并行性。但是这个过程比平时花费的时间要长得多。CPU时间相当大。该进程已被终止,但我觉得存在死锁问题(相信这是上次调查的原因)。查询是这样的:

INSERT INTO trg.TargetTable WITH (TABLOCKX, HOLDLOCK)
            (Col1, Col2, Col3...  )
    SELECT Col1, Col2, Col3, ...
    FROM src.SourceTable1
    JOIN src.sourcetable2 ON ...   
    OPTION (RECOMPILE);

这会导致死锁(tablock/holdlock 并行运行)吗?如果是这样,为什么它会随机发生?只有当进程并行时?而且,我该如何解决?

更新:这是我从sp_who2输出中看到的

在此处输入图像描述

标签: sqlsql-servertsqlsql-server-2012deadlock

解决方案


推荐阅读