テーブルがキューとして機能するシナリオでは、テーブルを構成し、ある方法でクエリを実行することが重要ですこれにより、複数のクライアントがキュー アイテムを同時に処理できるようになります。
UPDLOCK で悲観的な行ロックを使用する場合、およびROWLOCK では、1 つのワーカーのみがロックを取得して行を処理できます。この問題を解決して同時処理を有効にするには、次のアプローチを検討してください。
OUTPUT 句を使用したキューの実装
OUTPUT 句は、行をアトミックに取得および変更するメカニズムを提供します。 。 OUTPUT 句を使用してキューを実装する方法は次のとおりです。
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM TABLE WITH (READPAST) WHERE PROCESSED = 0) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
このクエリは、次の手順をアトミックに実行します。
クラスター化インデックスの最適化
へパフォーマンスをさらに最適化するには、PROCESSED 列にクラスター化インデックスを作成することが重要です。これにより、データが処理順に保存されるようになります。
CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
非標準クエリを回避する
スループットを最適化するには、次を使用してキュー テーブルへのクエリを回避することが重要です。上記のデキュー操作以外のメソッド。テーブルを追加の目的でピークまたは使用しようとすると、デッドロックやパフォーマンスの低下が発生する可能性があります。
以上がSQL Server を複数のクライアントの同時キューとして使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。