1

サーバー: 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

);
4

1 に答える 1

0

私のデッドロックは、何年も前にそこに置いたトリガーによって引き起こされていましたが、まだそこにあるとは信じていませんでした. それらを削除すると、デッドロックはなくなりました。

于 2012-10-12T20:53:59.750 に答える