这是如何在SQL Server中强制进行行级锁定的扩展。以下是使用案例:
我有一个账户表,其中包含账号、余额等信息。该表被许多应用程序使用。当我修改一个账户时,很可能有其他人正在修改另一个账户。因此,期望的行为是我将锁定我的账户(行),而另一个用户将锁定他的(另一行)。
但是,SQL Server 2008 R2会将此锁升级为页/表级别,第二个用户会出现超时异常。我尝试了参考问题中提到的所有解决方案,但没有任何作用。
如何强制SQL Server仅对行级别进行锁定,或者如何修改此模型以使其与页/表级锁定一起使用?
编辑:更新通过其PK针对单个记录,并且已进行索引,因此仅更新/锁定一个行,并且该过程不需要超过一分钟。
现在看起来似乎出现了一些奇怪的情况。我正在使用一个ORM库来进行数据访问层,它打开了多个连接,我已经向他们的支持团队提出了问题。但是,为了测试目的,我在查询工具上打开了两个会话,然后进行了以下操作
Session #2的查询超时了!!! 对于
我有一个账户表,其中包含账号、余额等信息。该表被许多应用程序使用。当我修改一个账户时,很可能有其他人正在修改另一个账户。因此,期望的行为是我将锁定我的账户(行),而另一个用户将锁定他的(另一行)。
但是,SQL Server 2008 R2会将此锁升级为页/表级别,第二个用户会出现超时异常。我尝试了参考问题中提到的所有解决方案,但没有任何作用。
如何强制SQL Server仅对行级别进行锁定,或者如何修改此模型以使其与页/表级锁定一起使用?
编辑:更新通过其PK针对单个记录,并且已进行索引,因此仅更新/锁定一个行,并且该过程不需要超过一分钟。
现在看起来似乎出现了一些奇怪的情况。我正在使用一个ORM库来进行数据访问层,它打开了多个连接,我已经向他们的支持团队提出了问题。但是,为了测试目的,我在查询工具上打开了两个会话,然后进行了以下操作
Session # 1
begin tran
UPDATE myTable SET COL_1 = COL_1 WHERE COL_1 = 101;
Session # 2
SELECT COL_1 FROM myTable WHERE COL_1 = 101;
Session #2的查询超时了!!! 对于
COL_1
的其他值的查询工作正常。现在看起来,如果同一记录在另一个会话中处于编辑模式,则SELECT会话被阻止。尽管Oracle支持选择正在被其他会话修改的行(使用默认参数/无关键字),但SQL Server不支持(使用默认参数/无关键字),因此问题似乎出在库中。