Sql server 解码SQL Server对象锁

Sql server 解码SQL Server对象锁,sql-server,locking,Sql Server,Locking,从阻塞的进程报告中,我得到一个等待资源,如下所示“OBJECT:6:1647722064:12”。现在我正试图破解这个。然而,我还没有在web上或Stack Overflow中找到这方面的有用信息 前两部分可以猜测: 6应该是数据库id 1647722064可能是对象id 但是数字12指的是什么呢? 没有id为12的索引,也不是分区表 有没有提示如何正确解码此等待信息 提前多谢 Martin这是文件的页码。下面的查询将是了解这一点的一个良好开端 DBCC PAGE (@DatabaseID,

从阻塞的进程报告中,我得到一个等待资源,如下所示“OBJECT:6:1647722064:12”。现在我正试图破解这个。然而,我还没有在web上或Stack Overflow中找到这方面的有用信息

前两部分可以猜测:

  • 6应该是数据库id
  • 1647722064可能是对象id
但是数字12指的是什么呢? 没有id为12的索引,也不是分区表

有没有提示如何正确解码此等待信息

提前多谢


Martin

这是文件的页码。下面的查询将是了解这一点的一个良好开端

DBCC PAGE (@DatabaseID, @File_No, @Page_No) WITH TABLERESULTS
在你的例子中,使用这个

DBCC PAGE (6, 1647722064, 12) WITH TABLERESULTS
页面锁是在数据库中锁定一个8k页面的数据(可能是几行),而对象锁将锁定整个对象(例如表)。这里有一个链接,指向一个很好的解释,它可能有助于使用不同的锁类型


当您传递DBCC PAGE命令时,其中一行是
Metadata:ObjectId
,它将告诉您此页面属于哪个父对象。当您查询sys.objects以查看父对象时,可以使用此ObjectId。

谢谢!有趣!那么,页面锁定(例如页面:6:3:70133)和对象锁定之间有什么区别呢?@MartinGuth我编辑了我的答案,因为这是一个有点多的评论,它应该比在这里重新编写更好地解释这一区别。我无法进一步了解,因为页面已经消失了。在进一步研究之后,我发现所有这些阻塞都发生在索引重建过程中,这非常有意义(不幸的是,只有SQL 2008标准…所以没有在线重建:-/)是的,就这样了。您是否对整夜运行的索引重建进行整夜维护?如果没有,请查看Ola Hallengren的索引脚本。通宵运行这些可以帮助他们在白天自动重建。谢谢你的建议。奥拉·哈伦格伦的剧本恰到好处,每晚都像个魔术师一样工作。然而,(表)重建导致XML列的XSchema发生了变化,无论该索引的当前分段如何,该列都必须运行。