码迷,mamicode.com
首页 > 其他好文 > 详细

等待资源(wait_resource)解码

时间:2019-11-30 22:41:34      阅读:367      评论:0      收藏:0      [点我收藏+]

标签:遇到   HERE   data   resource   tab   查询   dimp   odi   就是   

在调查阻塞或死锁时,你可能会遇到等待资源(wait_resource),通常等待的资源是Page或Key:

waitresource=“PAGE: 6:3:70133 “
waitresource=“KEY: 6:72057594041991168 (ce52f92a058c)“

等待资源的类型是Page或索引键,从等待资源可以探测出,阻塞发生时,竞争的资源到底是什么内容。

一,等待资源是PAGE

对于等待资源是PAGE的情况,PAGE的格式是 Database_Id : File_Id : PageNumber,如下所示:

waitresource=“PAGE: 6:3:70133 ” = Database_Id : FileId : PageNumber

每个Page的Header中都包含所属的table对象的信息,据此可以查询出竞争的资源是哪一个表的数据页。

1,查看Page Header的信息

根据以上信息,可以使用DBCC PAGE来查看page header的信息:

DBCC TRACEON (3604);
GO
/* DBCC PAGE (DatabaseName, FileNumber, PageNumber, DumpStyle)*/
DBCC PAGE (WideWorldImporters,3,70133,2);
GO

比较重要的字段是:ObjectID 和 IndexId 字段,如下图所示:

技术图片

2,查看Page的内容

根据DBCC PAGE返回的内容,可以使用 %%physloc%% 来查看Page上数据行的定位器。在Page上,每一个数据行都可以通过一个索引来寻址,该索引就是数据行的定位器。

SELECT 
    sys.fn_PhysLocFormatter (%%physloc%%) AS PhysLoc,
    *
FROM table WITH(NOLOCK)
WHERE sys.fn_PhysLocFormatter (%%physloc%%) like (3:70133%

二,等待资源是Key

对于等待的资源是Key的情况,Key资源的格式是 database_id, hobt_id (Magic Hash),其中 Magic Hash的某一个数据行的哈希值:

 waitresource=“KEY: 6:72057594041991168 (ce52f92a058c)” = Database_Id, HOBT_Id ( Magic Hash )

把该等待资源拆分成三个部分,分别是:

  • database_id = 6
  • hobt_id = 72057594041991168
  • magic hash value = (ce52f92a058c)

通过视图 sys.partitions 来查看hobt_id对应的object_id,使用%%lockres%% 来解码 Magic Hash。

如果想知道具体锁定的数据行,可以使用%%lockres%%函数来找到对应的数据行。

SELECT *
FROM table WITH(NOLOCK)
WHERE %%lockres%% = (ce52f92a058c);

 

 

参考文档:

Decoding Key and Page WaitResource for Deadlocks and Blocking

等待资源(wait_resource)解码

标签:遇到   HERE   data   resource   tab   查询   dimp   odi   就是   

原文地址:https://www.cnblogs.com/ljhdo/p/11964292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!