現在の状況:複数のeコマースショップを管理するプログラムを開発しています。注文の編集は多くのテーブルを含むタスクであるため、トランザクションを使用する必要があります。最後のクエリが失敗した場合は、以前のすべての変更を元に戻す必要があります。
注文を請求書に変更する機能があります。この関数は、一度に複数の注文を変更する場合があります。各変更には独自のトランザクションがあり、1つずつ処理されます。
ここで問題:2人のユーザーがこの機能を同時に(異なる順序で)使用すると、デッドロックが発生します...
DBMS:SQL Server 2008 R2接続コンポーネント:UniDACv4.5.9-TUniConnection
私が試した解決策の1つは、LockModeをlmPessimisticに設定することです。これによりデッドロックが減少しますが、それでも発生します...
アップデート:
この問題は、データベース分離モードとして「READ_COMMITTED_SNAPSHOT」を使用することで解決されました。これは私たちにとっては問題なく機能しますが、すべてのデッドロック状況で機能するわけではなく、いくつかの副作用があります!