0

単純な質問ですが、明確な解決策を見つけて数日を無駄にしました.

私は春の jdbc テンプレートを DAO レイヤーとして使用し、mssql サーバー 2005 をデータベースとして使用しており、注文入力システムがあります。現在、システムに 5 人以上の人がいると、非常に多くのデッド ロック シナリオが発生します。他の人が既存の注文を更新している間に新しい注文を作成しようとすると、ロックが発生するようです。同じテーブルに対する挿入ステートメントと更新ステートメントの間で競合が発生しているようです。

私はこれを修正するためにいくつかのことをしましたが、どれもうまくいきませんでした。そこで、Java.util.semaphore または Lock を導入してスレッドの同時アクセスを制御するか、同期化されたメソッドまたはブロックを使用することを考えています。

これについてどう思いますか?データベースサーバーでこれを処理するより良い方法はありますか?

ありがとう。

4

1 に答える 1

0

sp_getApplock を使用して、データベース側でセマフォと同等のソリューションを実装できます。しかし、ほとんどの場合、それは必要ありません。異なるタイプのデッドロックには、異なる種類の処理が必要です。以下のリンクの投稿を見て、一般的なデッドロック パターンを修正する方法を確認してください。 http://sqlindian.com/2012/07/06/sql-server-deadlocks-and-live-lockscommon-patterns/

トレース フラグ 1222 を使用して特定のデッドロックをキャプチャし、トレースの詳細をここに投稿していただければ、さらにサポートさせていただきます。

于 2012-08-21T23:28:06.053 に答える