我有一个包含大约 250 万条记录的表,将更新其中大约 70 万条记录,并且希望更新这些记录,同时仍允许其他用户查看数据。我的更新语句看起来像这样:
UPDATE A WITH (UPDLOCK,ROWLOCK)
SET A.field = B.field
FROM Table_1 A
INNER JOIN Table2 B ON A.id = B.id WHERE A.field IS NULL
AND B.field IS NOT NULL
我想知道是否有任何方法可以确定 sql server 在什么时候将升级对更新语句的锁定(因为我不希望锁定整个表)?
我无权运行服务器跟踪来查看锁的应用情况,那么是否有其他方法可以知道锁将在什么时候升级以覆盖整个表?
Thanks!
根据玻尔 http://msdn.microsoft.com/en-us/library/ms184286.aspx一旦该语句在对象的单个实例上获取了 5,000 个行或页级锁,就会尝试升级锁。如果此尝试因另一个事务具有冲突锁而失败,则它将在每获取额外 1,250 个锁后重试。
我不确定您是否真的可以将这些数字视为福音,或者是否还有比这更微妙的东西(我猜您总是可以在任意数量的锁上达到实例的内存限制)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)