代码之家  ›  专栏  ›  技术社区  ›  Ryan Gadsdon

解决死锁-SQL Server

  •  0
  • Ryan Gadsdon  · 技术社区  · 7 年前

    我在来自两个单独存储过程的这两个查询之间遇到死锁:

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

        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在死锁发生之前防止死锁:

    例如

        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
    

    这样行吗?或者其他人能给我一些建议吗?

    谢谢

    0 回复  |  直到 7 年前
        1
  •  0
  •   Milad    7 年前

    必须保存在每笔交易中。

    精确 一致性 数据量 存储在数据库、数据仓库、数据集市或其他结构中。

        2
  •  0
  •   RichardBSmith    7 年前

    最好的方法是调整两者的性能,这样它们就不太可能同时运行。