查找为给定表锁定的行以及在SQL Server中锁定它们的人员

Jef*_*ock 4 sql-server

有没有办法找出SQL Server 2008中特定表锁定的行?我也想知道锁定它们的用户.

Rem*_*anu 6

sys.dm_tran_locks,正如694581中已经说过的那样.要识别实际锁定的行,您需要了解锁定层次结构(table-> rowset-> page-> row),并且需要破解锁资源描述.对于表锁是对象id sys.objects,对于rowsets是partition_id sys.partitions,对于pages,是实际的页面id.对于行,它取决于堆还是btree,但您可以使用(未​​记录的)%%lockres%%虚拟列来查找行.如果这太简单了,您还需要考虑范围锁,因为它们会影响指定范围内的所有行.

当您添加导航物理层次结构的难度时,特别是涉及页面锁定时,使用锁兼容性矩阵的复杂模型,哈希冲突增加的复杂性并考虑您正在查看的锁定的更改速度,我会说,在最好的情况下,你可以做一个非常粗略的近似.除了进行特定的问题调查外,没有必要深入研究这个问题.听到一个主动查看锁定的应用程序并根据所看到的信息做出任何决定,我会感到震惊.