使用 updlock 锁定提示的副作用?

use*_*964 4 sql-server-2008 sql-server deadlock

我只是在探索UPDLOCKSQL-Server 2008 中的提示,我发现它在避免某些死锁场景方面非常有用。使用这些类型的锁定提示时总会有一些副作用,但我找不到任何与此相关的副作用。

那么如果我在所有update查询中都使用它会发生什么?我不是在谈论select,只是update。它将如何对我产生负面影响?

Pau*_*ite 6

那么如果我在所有更新查询中使用它会发生什么?

像所有提示一样,UPDLOCK应该只在有明显好处的地方使用。

它将如何对我产生负面影响?

这取决于查询和执行计划。假设您只是提议添加UPDLOCK到目标表,那么在非常简单的情况下可能根本没有负面影响。

“非常简单的情况”是关于哪些行符合条件的所有决定都是在单个计划运算符中做出的。在这种情况下,更新锁只适用于肯定符合条件的行,因此不会造成任何伤害。

U即使在没有UPDLOCK提示的情况下搜索符合条件的行时,SQL Server也会自动锁定,但仅限于主要访问方法(例如,索引查找和任何关联的 RID 或键查找)。这些自动U锁是特殊的,因为如果计划中的后续操作符确定该行根本不符合条件,SQL Server 仍然可以提前释放它们。

UPDLOCK指定时,所采取的任何更新锁不能在交易结束前公布,即使在该计划的其他运营商确定该行实际上并没有资格获得更新。这些额外的U锁会降低并发性,并可能导致锁升级为表独占锁。

由于这些原因,UPLOCKUPDATE查询进行常规指定通常不是一个好主意。