【发布时间】:2015-10-01 06:32:03
【问题描述】:
有人知道如何解决这个问题吗?当我跟踪错误时。我看到一段代码调用了这个查询。
SqlException : 事务(进程 ID 57)在锁上死锁
SELECT A.[CallID]
FROM dbo.[Calls] A WITH(NOLOCK)
INNER JOIN [dbo].[Issues] B WITH(NOLOCK) ON A.[CallID] = B.[CallID]
WHERE A.[AddedByUserID] = @UserID
AND A.[EndTime] IS NULL
AND DATEDIFF(d,A.AddedOn,GETDATE()) <= 1
我对@987654322@ 的理解是防止死锁。但是为什么我会遇到这个错误?
【问题讨论】:
-
首先
WITH NOLOCK不是消除并发问题的魔法棒。其次,它可能会导致 dirty reads 。最后,当 DDL 发生时,WITH (NOLOCK)可以被SCHEMA STABILITY LOCK阻止。 -
您还应该查看所涉及的 SQL 的锁定和读取模式。索引可能会解决您的问题,更改 SQL 也可以。根据这些数据的用途,NOLOCK 可能会导致更大的死锁问题。
标签: asp.net sql-server deadlock