34,588
社区成员
发帖
与我相关
我的任务
分享
--1.
select spid,loginame,waitresource from master..sysprocesses
where blocked <> 0
/*
spid loginame waitresource
53 ggg-PC\Administrator RID:1:1:1385:0
*/
--2.查看语句
dbcc inputbuffer(53)
/*
eventInfo
select * from xx
*/
--3.查看锁的信息
exec sp_lock @spid1 = 53
/*
spid dbid ObjId IndId Type Resource Mode Status
53 1 1335727861 0 PAG 1:1385 IS GRANT
53 1 1335727861 0 RID 1:1385:0 S WAIT
53 1 1335727861 0 TAB IS GRANT
*/
--select OBJECT_ID(1335727861) as table_name
--4.根据锁信息中的 dbid列:1335727861,找到了这个xx表
select *
from sysobjects
where id = 1335727861
/*
name id xtype uid info status base_schema_ver replinfo parent_obj crdate ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel refdate version deltrig instrig updtrig seltrig category cache
xx 1335727861 U 1 0 0 0 0 0 2013-12-25 08:55:07.523 0 0 0 U 1 3 0 2013-12-25 08:55:07.523 0 0 0 0 0 0 0
*/
/*==============================================
syslockinfo系统表中字段:
rsc_type:资源类型:
1 = NULL 资源(未使用)
2 = DB 数据库
3 = FIL 文件
4 = 索引
5 = TAB 表
6 = PAG 页
7 = KEY 键
8 = EXT 区
9 = RID(行 ID)
10 = APP 应用程序
rsq_mode:该列是请求者的锁模式,并且代表已授权模式,或代表转换或等待模式。
与master.dbo.spt_values的number=0是LOCK TYPES,不是具体的锁请求模式,所以关联条件是:rsc_mode + 1 = number,
0 = NULL。不授权访问资源。用作占位符。
1 = Sch-S 架构稳定性。确保在任何会话持有对架构元素(例如表或索引)的架构稳定性锁时,其他会话不能删除该架构元素。
2 = Sch-M 架构修改。必须由要更改指定资源架构的任何会话持有。确保没有其他会话正在引用所指示的对象。
3 = S 共享。授予持有锁的会话对资源的共享访问权限。
4 = U 更新。指示对最终可能更新的资源获取的更新锁。用于防止常见形式的死锁,这类死锁在多个会话锁定资源并且稍后可能更新资源时发生。
5 = X 排他。授予持有锁的会话对资源的独占访问权限。
6 = IS 意向共享。指示有意将 S 锁放置在锁层次结构中的某个从属资源上。
7 = IU 意向更新。指示有意将 U 锁放置在锁层次结构中的某个从属资源上。
8 = IX 意向排他。指示有意将 X 锁放置在锁层次结构中的某个从属资源上。
9 = SIU 共享意向更新。指示对有意在锁层次结构中的从属资源上获取更新锁的资源进行共享访问。
10 = SIX 共享意向排他。指示对有意在锁层次结构中的从属资源上获取排他锁的资源进行共享访问。
11 = UIX 更新意向排他。指示对有意在锁层次结构中的从属资源上获取排他锁的资源持有的更新锁。
12 = BU。由大容量操作使用。
13 = RangeS_S(共享键范围和共享资源锁)。指示可串行范围扫描。
14 = RangeS_U(共享键范围和更新资源锁)。指示可串行更新扫描。
15 = RangeI_N(插入键范围和空资源锁)。用于在将新键插入索引前测试范围。
16 = RangeI_S。通过 RangeI_N 和 S 锁的重叠创建的键范围转换锁。
17 = RangeI_U。通过 RangeI_N 和 U 锁的重叠创建的键范围转换锁。
18 = RangeI_X。通过 RangeI_N 和 X 锁的重叠创建的键范围转换锁。
19 = RangeX_S。通过 RangeI_N 和 RangeS_S 锁的重叠创建的键范围转换锁。
20 = RangeX_U。通过 RangeI_N 和 RangeS_U 锁的重叠创建的键范围转换锁。
21 = RangeX_X(排他键范围和排他资源锁)。这是在更新范围中的键时使用的转换锁。
req_status:锁请求的状态。
1 = GRANT 已授予
2 = CNVT 正在转换
3 = WAIT 正在等待
req_ownertype:与锁关联的对象类型。
1 = 事务
2 = 游标
3 = 会话
4 = ExSession
注意,3 和 4 代表会话锁的特殊版本,分别跟踪数据库锁和文件组锁。
======================================================================*/
--阻塞在哪个或者哪些个表格上?哪些资源上?
--检查:这个可以运行sp_lock。
exec sp_lock
--或者直接运行下面的查询,得到一样的效果。
select
req_spid,
rsc_dbid, --与资源关联的数据库ID
rsc_objid, --与资源关联的索引ID
rsc_indid, --与资源关联的对象ID
rsc_text as Resource, --锁资源的文本化描述。包含资源名称的一部分
lockType.name as resource_type,
lockMode.name as request_mode,
lockStatus.name as request_status
from master.dbo.syslockinfo s
inner join master.dbo.spt_values lockType --锁类型,type为LR,
on lockType.number = s.rsc_type and
lockType.type = 'LR'
inner join master.dbo.spt_values lockMode --锁的请求模式,如:S,X,IS,IX,U,IU
on lockMode.number = s.req_mode + 1 and
lockMode.type = 'L'
inner join master.dbo.spt_values lockStatus --锁请求的状态:grant,wait
on lockStatus.number = s.req_status and
lockStatus.type = 'LS' and
lockStatus.name = 'WAIT' --表示正在等待锁
order by spid