SQL Server死锁资源的查看

出现死锁,或者阻塞时,针对聚集索引的等待资源为key:dbid:hobtid(keyhashvalue),一般通过上下文,很容易知道对应的表,索引是什么,如果想知道对应表中哪条数据时,就比较麻烦了。
如下图
sql server提供了%%lockres%%函数,其对应值就是keyhashvalue。为键值的哈希码,通过这个码我们就能知道对应的行记录,注意这个值是同时包括括号的。
如:

以上面的死锁为例,可以获取对应的数据行

如果表没有聚集索引时,SQL SERVER存储数据将会以堆的方式存在,那么此时将显示为page的模式,如:
可以看到,这些数据,都在一个页上。如果插入更多数据,将看到下面的结果:

上面的数据在分配上, 215和998间值是不连续的,这也证明了,sql server下需要有聚集才能保证数据的有序性,才能更好的避免死锁。
如果想看到这些记录在那个数据页上,可以通过%%physloc%%与sys.fn_physlocformatter获取。

附:可以通过下面的脚本,根据数据库名和死锁KEY资源获取数据
declare @databaseName varchar(100) = 'test' --数据库名declare @keyValue varchar(100) = 'KEY: 8:72057845012037632 (37f01f22e733)' --资源declare @lockres varchar(100)declare @hobbitID bigint select @hobbitID = convert(bigint, RTRIM(SUBSTRING(@keyValue, CHARINDEX(':', @keyValue, CHARINDEX(':', @keyValue) + 1) + 1, CHARINDEX('(', @keyValue) - CHARINDEX(':', @keyValue, CHARINDEX(':', @keyValue) + 1) - 1))) select @lockRes = RTRIM(SUBSTRING(@keyValue, CHARINDEX('(', @keyValue) + 1, CHARINDEX(')', @keyValue) - CHARINDEX('(', @keyValue) - 1)) declare @objectName sysnamedeclare @ObjectLookupSQL asSQL Server死锁资源的查看
出现死锁,或者阻塞时,针对聚集索引的等待资源为key:dbid:hobtid(keyhashvalue),一般通过上下文,很容易知道对应的表,索引是什...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



