>  기사  >  데이터 베이스  >  SQLServer 查询使用键查找时锁申请及释放顺序

SQLServer 查询使用键查找时锁申请及释放顺序

WBOY
WBOY원래의
2016-06-07 15:44:381276검색

begin tran select cont2 from testklup with ( HOLDLOCK ) where nlskey = 1 在默认的事务隔离级别下,开启事务,然后查询中使用HOLDLOCK提示。HOLDLOCK将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。 然后使用DMV视图sys.

<span>begin</span> <span>tran</span> 
<span>select</span> cont2 <span>from</span> testklup <span>with</span>(<span>HOLDLOCK</span>) <span>where</span> nlskey<span>=</span><span>1</span>

在默认的事务隔离级别下,开启事务,然后查询中使用HOLDLOCK提示。HOLDLOCK将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。

然后使用DMV视图sys.dm_tran_locks来查看持有锁的情况,查询结果如下:

SQLServer 查询使用键查找时锁申请及释放顺序

从查询结果,可以得出申请了如下的锁:

1)在表object上申请了IS锁

2)在非聚集索引PAGE上申请了IS锁

3)在非聚集索引KEY上申请了S锁

4)在聚集索引的PAGE上申请了IS锁

5)在聚集索引的KEY上申请了S锁

 

查看锁申请和释放的顺序

 

我们使用SQL Profiler来跟踪锁申请和释放的事件。

备注:也可以在执行语句前,开启1200跟踪标记,使用语句dbcc traceon(1200,-1) (感谢CareySon)

模板选择TSQL-LOCKS,只跟踪运行语句的会话spid,同时事件增加Lock:Acquired和Lock:Released。执行查询跟踪结果如下:

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.