bja*_*jan 3 sql-server rowlocking
这是一个扩展,是否可以强制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;
Run Code Online (Sandbox Code Playgroud)
Session#2中的查询超时!!! 对其他值的查询COL_1工作正常.现在它看起来如果同一记录在另一个会话中处于编辑模式,则会阻止SELECT.
虽然Oracle确实支持在被其他会话修改时选择一行(使用默认的params/no关键字),但SQL Server没有(使用默认的params/no关键字),所以看起来问题出在库中.
默认情况下,SQL Server始终使用行级锁定....那么你究竟需要什么呢?
如果您锁定超过一定数量的行(大约5000),那么SQL Server将执行锁定升级(锁定表而不是单独超过5000行)以优化性能并优化资源使用 - 但这是一件好事!:-)
有办法完全关闭它 - 但不推荐这些!因为你在SQL Server的存储引擎中搞乱了一个非常基本的机制.
看到:
| 归档时间: |
|
| 查看次数: |
19265 次 |
| 最近记录: |