【发布时间】:2020-05-14 20:26:21
【问题描述】:
使用 SQL Server 2016,我希望通过包含在同一张表上的简单插入/更新/删除的简单过程将数据从 SourceTable 合并到 DestinationTable。
SourceTable 由几个不同的应用程序填充,它们调用MergeOrders 存储过程将他们上传的行从SourceTable 合并到DestinationTable。
MergeOrders 存储过程可以有多个实例并行运行。
我得到了很多锁,但这是正常的,问题是有时我会得到“行组死锁”,这是我无法承受的。
在这种并行环境中执行这种合并操作的最佳方式是什么。
我正在考虑 TABLOCK 或 SERIALIZABLE 提示,或者可能是应用程序锁来序列化访问,但如果有更好的方法感兴趣。
【问题讨论】:
-
DestinationTable 上还有其他索引吗?如果所有应用程序都使用一个 SourceTable,那么并行运行它可能没有意义,而应用程序锁是最简单的方法。
标签: sql-server merge sql-server-2016 database-deadlocks