解决死锁 - SQL Server

问题描述 投票:1回答:2

我从两个独立的存储过程中获得这两个查询之间的死锁:

1.

UPDATE ord
SET
    [Num] = @Num,
    [Ref] = @Re,
    [Date] = @Date
FROM [Order] ord
INNER JOIN [Orders_Open] oo ON oo.Id = ord.ID

2.

    UPDATE oo
    SET oo.Name = i.Name,
    oo.Email = i.Email,
    oo.PostCode = i.PostCode,
    FROM Item_Order i 
    INNER JOIN [Orders_Open] oo ON oo.ID = i.ID

解决防止僵局的最佳方法是什么?我已经研究过使用holdlock来防止死锁发生之前:

EG

    UPDATE oo WITH (HOLDLOCK)
    SET oo.Name = i.Name,
    oo.Email = i.Email,
    oo.PostCode = i.PostCode,
    FROM Item_Order i 
    INNER JOIN [Orders_Open] oo ON oo.ID = i.ID

这会有用吗?或者其他人可以就我还能尝试的其他方面提出建议吗?

谢谢

sql sql-server deadlock
2个回答
0
投票

您可以同时更新相同的记录,因为必须在每个事务中保留数据完整性。

数据完整性是指存储在数据库,数据仓库,数据集市或其他构造中的数据的准确性和一致性。

您可以为这两个查询使用一个事务块来防止死锁。


0
投票

最好的方法是调整两者的性能,因此它们不太可能在同一时刻运行。

© www.soinside.com 2019 - 2024. All rights reserved.