锁-学习笔记(二)

如何查看锁的信息

主要使用的工具:

一、sys.dm_tran_locks动态管理视图来查询锁的情况,得到的结果是当前所有锁的一个快照,包含处于WAIT和CONVERT状态的锁的信息。

二、SQL Profiler,可以显示所有当前已经获得的锁的信息,但不能显示尚未获得的、处于WAIT和CONVERT状态的锁的信息。SQL Profiler对分析操作完成即释放的锁,如查询操作附加的共享锁或分配空间时附加的区锁,非常有用。因为这种锁不会保持到事务结束,使用动态管理视图sys.dm_tran_locks很难捕捉,只能使用SQL Profiler跟踪其产生及释放的过程。

CONVERT状态指在要转换某个资源上的锁模式时与资源上现有的锁不兼容,而发生等待的情况,也可称为等待转换。

使用sys.dm_tran_locks动态管理视图

使用sys.dm_tran_locks动态管理视图查询锁的情况时,可以使用以下代码创建视图dbLocks来帮助查询,代码中使用cast函数对相关列的长度进行了改变,是为了使查询结构的版面清晰。

if object_id('dbLocks') is not null drop view dbLocks
go
create view dbLocks
as
select cast(request_session_id as varchar(4)) as spid,
case when resource_type='OBJECT' then
   cast(object_name(resource_associated_entity_id) as varchar(10))
   when resource_associated_entity_id=0 then 'n/a'
   else cast(object_name(p.object_id) as varchar(10))
   end as ety_name,
   index_id,
   cast(resource_type as varchar(8)) as ety_type,
   cast(resource_description as varchar(15)) as description,
   cast(request_mode as varchar(8)) as mode,
   cast(request_status as varchar(8)) as status
from sys.dm_tran_locks t left join sys.partitions p 
on p.hobt_id=t.resource_associated_entity_id
where resource_database_id=db_id()
and object_id('dbLocks')!=resource_associated_entity_id

 

dbLocks视图各列的含义
列名 含义 说明
spid 会话ID编号 可以查询@@spid返回当前连接的spid
ety_name 锁定资源所属对象名称 主要是数据页、索引键所属表名
index_id 索引编号 0表示表,1表示聚集索引,其他值表示非聚集索引
ety_type 锁定资源的类型 其值主要包括DATABASE、FILE、EXTENT、OBJECT、PAGE、RID、KEY等
description 锁定资源的描述 对EXTENT  PAGE  RID  KEY的描述,如EXTENT表示它的起始页页号及其所属文件号
mode 锁模式 IS  S  IX  X  IU  U等模式
status 锁的状态 GRANT 获得  WAIT 等待  CONVERT 等待转换 3种状态 

使用SQL Profiler工具查询锁的信息

使用SQL Profiler跟踪锁的情况,可以专门创建一个模板,命名为Locks,设置其模板属性时,选择Locks及Scans两个事件类。在Locks类中选择Lock:Acquired   Lock:Released   Lock:Escalation事件,Scans类中选择Scan:Started   Scan:Stopped事件。

 

 点击组织列将Mode  ObjectID   SPID   TYPE    TextData列上移,显示在事件列的最前端以方便查看,使用SQL Profiler工具查看锁的信息时,就可以选择此处创建的Locks跟踪模板.

 

posted @ 2020-09-17 10:21  luckyt  阅读(262)  评论(0)    收藏  举报