0

さまざまなデータベース テクノロジ、最近の MS-SQL と H2、およびさまざまなアプリケーションでも、テーブル ロックを取得できなかったステートメントから例外が発生します。

これは特に、多数の並列スレッドから同じテーブルにアクセスする場合に発生します。これらの競合は、十分に複雑なステートメントと十分な並列スレッドで原則的に回避できないと仮定すると、これらの失敗したステートメントを処理するための良い方法は何ですか?

  • MS-SQL 例外は、ステートメントを再試行することを明示的に提案します。
  • H2 では LOCK_TIMEOUT を設定できます。

この方法ではすべてのステートメントが失敗する可能性があるため、ソフトウェア内のすべてのステートメントに対して再試行が必要になります。追加する必要がある定型コードがたくさんあるようです。

対照的に、タイムアウトは単純な構成ですが、さらにいくつかのスレッドが再び例外をトリガーしないことを保証するには、タイムアウトを過度に高くする必要があります。これにより、再試行ロジックに戻ります。

従来のコードには数 10 個のステートメントが含まれており、それぞれが独自のメソッドで実装され、接続/ステートメント/結果セットのトリプレットを開いたり閉じたりします。それぞれを再試行ループにラップする以外に、リファクタリングする良い方法は何でしょうか? パフォーマンスが低下しても問題ありませんが、失敗したステートメントはありません。

4

0 に答える 0