sql-server – 我需要行级锁定

前端之家收集整理的这篇文章主要介绍了sql-server – 我需要行级锁定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是 Is it possible to force row level locking in SQL Server?的扩展.这是用例

我有帐户表,帐号,余额等.许多应用程序正在使用此表.很可能在我修改帐户时,其他人正在修改另一个帐户.所以预期的行为是我会锁定我的帐户(ROW)而另一个用户将锁定他的(另一个ROW).

sql Server 2008 R2将此锁定升级页面/表,第二个用户获得超时异常.我已经尝试了所引用问题中提到的所有解决方案,但没有任何工作.

如何强制sql Server仅锁定行级锁定?或者如何以与页面/表锁定一起使用的方式修改此模型?

编辑
此更新通过其PK以单个记录为目标,并且已编制索引,因此只有一行正在更新/锁定,并且该过程不会超过一分钟

编辑
现在它看起来很奇怪.我正在为DAL使用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确实支持在被其他会话修改时选择一行(使用默认的params / no关键字),但sql Server没有(使用默认的params / no关键字),所以看起来问题出在库中.

解决方法

默认情况下,sql Server始终使用行级锁定….那么你究竟需要什么呢?

如果您锁定超过一定数量的行(大约5000),那么sql Server将执行lock escalation(锁定表而不是单独超过5000行)以优化性能并优化资源使用 – 但这是一件好事! 原文链接:https://www.f2er.com/mssql/83486.html

猜你在找的MsSQL相关文章