我在一个存储过程上的性能非常差,该存储过程对几个非常小的表进行了超过一百次(!)更新,并且似乎所有并发用户都在不断地相互阻塞。
计划在今年晚些时候对 proc 进行完全重写,但与此同时,我想看看我们是否可以通过强制对每个受影响的表进行行级锁定来缓解这个问题。
在 Sybase 上,您可以(或者至少可以在 2007 年左右)使用以下语句强制对表进行行级锁定:
alter table titles lock datarows
在 SQL Server 上,似乎获得相同效果的唯一方法是在每个更新或插入语句上使用 WITH (ROWLOCK)。即便如此,这也只是一个可以忽略的提示。
SQL Server 中是否有一种方法可以强制(或强烈支持)对给定表的所有更新进行行级锁定?