为什么要同时使用NOLOCK和NOWAIT?

富有的

一位同事编写了一个查询,该查询使用了提示“ with(NOLOCK,NOWAIT)”。

例如

select first_name, last_name, age
from people with (nolock,nowait)

假设:

NOLOCK表示“不必担心任何级别的任何锁,现在就读取数据”

NOWAIT说:“不要等待,如果表被锁定,只会报错”。

问题:
为什么要同时使用两者?当然NOWAIT永远不会实现,因为NOLOCK意味着它无论如何都不会等待锁...?

Damien_The_Unbeliever

这是多余的(或者至少是无效的)。在一个查询窗口中,执行:

create table T (ID int not null)
begin transaction
alter table T add ID2 int not null

保持此窗口打开,打开另一个查询窗口并执行:

select * from T WITH (NOLOCK,NOWAIT)

尽管有该NOWAIT提示,并且尽管已将其记录为在遇到任何锁定时都返回一条消息,但第二个查询仍将挂起,等待Schema锁定。

阅读有关 表格提示 的文档

NOWAIT

指示数据库引擎在表上遇到锁定后立即返回一条消息

请注意,这里所说的是锁,任何锁。

NOLOCK(嗯,实际上READUNCOMMITTED):

READUNCOMMITTED和NOLOCK提示仅适用于数据锁。所有查询,包括具有READUNCOMMITTED和NOLOCK提示的查询,在编译和执行期间均获取Sch-S(模式稳定性)锁。因此,当并发​​事务在表上持有Sch-M(架构修改)锁时,查询将被阻止。

因此, NOLOCK 确实需要等待 一些 锁。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么要同时使用TypeScript和Babel?

为什么要同时使用os.path.abspath和os.path.realpath?

SignalR和WebAPI,为什么要同时使用两者?

为什么要同时检查isset()和!empty()

为什么要同时使用龙卷风和烧瓶?

为什么要同时使用龙卷风和烧瓶?

我需要同时使用 isset() 和 $post_variable="value" 吗?为什么不只是后者?

为什么在AngularJS的输入中需要同时指定名称和ng-model?

为什么Linux需要同时具有`/ dev / cdrom`和`/ media / cdrom`?

为什么要同时具有类变量和实例变量的类?

document.registerElement-为什么我们需要同时指定“原型”和“扩展”?

为什么需要同时定义STATIC_URL和STATICFILES_DIRS?

为什么像ant design这样的React组件库要同时打包和转译?

为什么仅在固定工作时需要同时使用固定和显示点操纵器来显示小数点和尾随零?

为什么要同时使用布尔AND中断()信号终止线程?

如果在活性分析中要同时使用和覆盖变量,它的状态是什么

JavaScript继承为什么我需要同时调用fun.call和prototype = new Obj()?

为什么只有1个参数时要同时加载ldarg.0和ldarg.1?

F#:为什么同时使用'::'和'@'

我是否需要同时使用变量和属性?

是否有必要同时使用 Jenkins 和 GitHub?

Glassfish + NetBeans:为什么将JSF Web App作为表示模块需要同时引用EJB API模块和EJB实现模块

ReactJS vs NodeJS-为什么需要同时创建两者?

为什么要同时等待异步请求和其内容的读取?

为什么在调用glVertexAttribPointer时需要同时为VBO和数据指定数据?

为什么强烈建议不要同时申请和订购组织?

为什么不能同时使用背景图像和颜色?

为什么LinkedCaseInsensitiveMap同时使用LinkedHashMap的和HashMap?

为什么同时使用前缀和后缀是非法的?