ホームページ > データベース > mysql チュートリアル > SQL Server キューからの注文を処理する際の競合状態を防ぐにはどうすればよいですか?

SQL Server キューからの注文を処理する際の競合状態を防ぐにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-18 01:36:08
オリジナル
878 人が閲覧しました

How Can I Prevent Race Conditions When Processing Orders from an SQL Server Queue?

SQL Server 注文キューの競合状態の回避

複数の注文プロセッサがストアド プロシージャ経由で注文キューにアクセスし、それぞれ 20 件の注文を取得します。 これにより、複数のプロセッサが同じ順序を取得する競合状態が発生し、処理エラーが発生する可能性があります。

この同時実行の問題を解決する解決策は次のとおりです:

1 つのアプローチでは、READPAST ヒントを使用してロックされた行をバイパスし、ロックのエスカレーションを防ぐための ROWLOCK と排他的な行ロックのための UPDLOCK を組み合わせます。 これにより、各プロセッサが行の個別のバッチをロックできるようになります (例: プロセッサ 1 は行 1 ~ 20 をロックし、プロセッサ 2 は行 21 ~ 40 をロックするなど)。

変更されたストアド プロシージャは次のようになります:

<code class="language-sql">UPDATE TOP (20) foo
SET ProcessorID = @PROCID
FROM OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE ProcessorID = 0;</code>
ログイン後にコピー

もう 1 つの方法では、OUTPUT 句を使用します。これにより、SELECT 操作と UPDATE 操作が 1 つのアトミック ステートメントに結合され、更新された行をプロセッサーが即座に利用できることが保証されます。 これにより、SELECTUPDATE を個別に操作する必要がなくなり、競合状態が防止されます。

以上がSQL Server キューからの注文を処理する際の競合状態を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート