サーバー: SQL Server 2008R2 クライアント: Excel/ADO - 8 クライアント サーバー ハードウェア: 8 コア/16GB メモリ/OS: WinServer 2008SR2
Insert/Update ストアド プロシージャと Merge/Matched ストアド プロシージャの両方でデッドロックが発生します。
ここで挿入/更新について多くのことを読み、その結果、挿入/更新をマージ/一致に変更しましたが、実行されているわずか 8 つのクライアントから非常に頻繁にデッドロック エラー (10 分ごとに約 1 回) が発生します。 1 分あたり 2 回の速度で更新を要求するバッチ モード。
対照的に、各クライアントは 1 分あたり約 20,000 アイテムを別のテーブルに挿入しますが、まったく問題はありません。
このようなわずか 8 つのクライアント (特に Excel/ADO/VBA) がこの DB にストレスを与えることができるとは思わないので、これらのデッドロックの問題を解決するための支援が欲しいです!
また、クライアントから直接 SQL コマンドを発行していないことにも注意してください。すべての SQL コマンドは、ストアド プロシージャを介して呼び出されます。
現在の SP:
merge [dbo].[File_Level_Data] as TargetMerge
using(select @Name_of_File as name)as source
on (TargetMerge.Name_of_File = source.name)
when matched then
update
set
XXX1 = @XXX1,
ZZZ25 = @ZZZ25
when not matched then
insert
(XXX1,
ZZZ25
) values
(
@XXX1,
@ZZZ25
);