いくつかの非常に小さなテーブルに対して100(!)を超える更新を行うストアドプロシージャのパフォーマンスが非常に低くなり、すべての同時ユーザーが常に相互にブロックしているように見えます。
procの完全な書き直しは今年後半に予定されていますが、それまでの間、影響を受ける各テーブルに行レベルのロックを強制することで問題を軽減できるかどうかを確認したいと思いました。
Sybaseでは、次のステートメントを使用して、テーブルの行レベルのロックを強制できます(または少なくとも2007年頃になる可能性があります)。
alter table titles lock datarows
SQL Serverでは、同じ効果を得る唯一の方法は、すべての更新または挿入ステートメントでWITH(ROWLOCK)を使用することであるように見えます。それでも、無視できるのはヒントにすぎません。
SQL Serverには、特定のテーブルに対するすべての更新に対して行レベルのロックを強制する(または強く支持する)方法はありますか?