use*_*964 4 sql-server-2008 sql-server deadlock
我只是在探索UPDLOCK
SQL-Server 2008 中的提示,我发现它在避免某些死锁场景方面非常有用。使用这些类型的锁定提示时总会有一些副作用,但我找不到任何与此相关的副作用。
那么如果我在所有update
查询中都使用它会发生什么?我不是在谈论select
,只是update
。它将如何对我产生负面影响?
那么如果我在所有更新查询中使用它会发生什么?
像所有提示一样,UPDLOCK
应该只在有明显好处的地方使用。
它将如何对我产生负面影响?
这取决于查询和执行计划。假设您只是提议添加UPDLOCK
到目标表,那么在非常简单的情况下可能根本没有负面影响。
“非常简单的情况”是关于哪些行符合条件的所有决定都是在单个计划运算符中做出的。在这种情况下,更新锁只适用于肯定符合条件的行,因此不会造成任何伤害。
U
即使在没有UPDLOCK
提示的情况下搜索符合条件的行时,SQL Server也会自动锁定,但仅限于主要访问方法(例如,索引查找和任何关联的 RID 或键查找)。这些自动U
锁是特殊的,因为如果计划中的后续操作符确定该行根本不符合条件,SQL Server 仍然可以提前释放它们。
当UPDLOCK
指定时,所采取的任何更新锁不能在交易结束前公布,即使在该计划的其他运营商确定该行实际上并没有资格获得更新。这些额外的U
锁会降低并发性,并可能导致锁升级为表独占锁。
由于这些原因,UPLOCK
对UPDATE
查询进行常规指定通常不是一个好主意。
归档时间: |
|
查看次数: |
4279 次 |
最近记录: |