SQL Server 2014 でメモリ内のテーブルを操作する際に大きな問題があります。
SQL Server に readpast ロックがないことはわかっています。ただし、一部のシナリオでは、パフォーマンスが低下する可能性があります。
1 つのテーブルに 20 のレコードがあるとします。各レコードにはLockStatus
、初期値が の列が 1 つありますWait
。
2 人の消費者がレコードの上位 (10) を選択したい場合、どうなりますか?
コンシューマー 1 は最初の 10 レコードを取得し、ステータスを に変更しますLocked
。それらを使用している間、2 番目のコンシューマーは top(10) を選択しようとしますが、中止されます。
現在のトランザクションは、このトランザクションの開始以降に更新されたレコードを更新しようとしました。トランザクションは中止されました。
readpast ロックを使用すると、コンシューマー 2 に対して、中止する代わりに 2 番目の 10 レコードを選択するように伝えることができます。