SQLServer の糞なところ。

例えば、あるセッションAが レコードaのみを更新処理を行ってる最中に、
別のセッションBがレコードbのみを更新しようとしてたとする。
両セッションは異なるレコードを見てるのだから、同時処理が出来るように見える。

ところがどっこい違うんだよな。
セッションBが更新する時に、レコードbを検索するために全件検索を行おうとする。
ところがセッションAにてレコードaが排他ロックを掛けたために、レコードaの内容を読み取れずに待ち状態になってしまうんだよ。
つまりインデックスによる全件検索を回避しない限り、同時処理は不可能ということ。

このことをどれくらいの人が知ってるだろうな。
変更したままトランザクションを生かしたままにしてる運用の場合は、見事に嵌るよ。