sql-server – 我需要行级锁定
这是
Is it possible to force row level locking in SQL Server?的扩展.这是用例
我有帐户表,帐号,余额等.许多应用程序正在使用此表.很可能在我修改帐户时,其他人正在修改另一个帐户.所以预期的行为是我会锁定我的帐户(ROW)而另一个用户将锁定他的(另一个ROW). 但SQL Server 2008 R2将此锁定升级到页面/表,第二个用户获得超时异常.我已经尝试了所引用问题中提到的所有解决方案,但没有任何工作. 如何强制SQL Server仅锁定行级锁定?或者如何以与页面/表锁定一起使用的方式修改此模型? 编辑 编辑 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行)以优化性能并优化资源使用 – 但这是一件好事! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |