SQL Server キューからの同時処理
テーブルをキューとして使用する場合、複数のクライアントによる同時処理用の構成は困難になる場合があります。適切な構成がないと、複数のワーカーが同じ行を処理しようとし、競合が発生する可能性があります。
オプティミスティック同時実行制御:
最初に提供されたクエリは、ペシミスティック ロックを取得しようとします。処理対象の行にアクセスできるようにし、1 人のワーカーのみがその行にアクセスできるようにします。ただし、このアプローチでは、待機時間が長くなり、同時実行性が低下する可能性があります。
Output 句による悲観的同時実行制御:
SQL Server 2005 では、OUTPUT 句が導入され、より多くの処理が可能になります。効率的な悲観的な同時実行:
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM EXAMPLE_TABLE WITH (READPAST) WHERE PROCESSED = 0 ) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
このクエリは次のことを検出します。 READPAST ヒントを使用して、ロックされている行を無視して、最初の未処理の行。次に行を更新し、PROCESSED を 1 に設定します。OUTPUT 句は更新された行を返し、クライアントによって処理されます。
テーブル構成:
これを最適化するにはこのアプローチでは、クラスター化インデックスの最初の列として PROCESSED 列を使用してテーブルを構造化する必要があります。これにより、処理ステータスによって行が確実に順序付けされます。
クラスター化インデックスと非クラスター化インデックス:
ID 列の非クラスター化インデックスが考慮される場合がありますが、一般に、頻繁に使用されるキューには推奨されません。これは、非クラスター化インデックスによって追加のオーバーヘッドと複雑さが生じる可能性があるためです。
クエリ制限:
最適なパフォーマンスを得るには、キュー テーブルのクエリはデキュー操作に限定する必要があります。 、ピーク操作を回避するか、キューイングとデータ ストレージの両方の目的でテーブルを使用します。
以上がSQL Server キュー テーブルの同時処理を効率的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。