有没有办法找出 SQL Server 2008 中特定表的哪些行被锁定?我还想知道锁定它们的用户。
sys.dm_tran_locks http://msdn.microsoft.com/en-us/library/ms190345.aspx,正如已经说过的694581 https://stackoverflow.com/questions/694581/how-to-check-which-locks-are-held-on-a-table。要识别哪些行实际上被锁定,您需要了解锁定层次结构(表->行集->页->行)并且需要破解锁资源描述。对于表锁来说,对象 id 来自sys.objects http://msdn.microsoft.com/en-us/library/ms190324.aspx,对于行集来说是来自的partition_idsys.partitions http://msdn.microsoft.com/en-us/library/ms175012.aspx对于pages 来说是实际的页面id。对于行,它取决于是堆还是 btree,但您可以使用(未记录)%%lockres%% http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/05/28/the-curious-case-of-the-dubious-deadlock-and-the-not-so-logical-lock.aspx虚拟列来查找行。如果这太简单了,你还需要考虑范围锁 http://msdn.microsoft.com/en-us/library/ms191272.aspx因为它们影响指定范围内的所有行。
当您将导航物理层次结构的难度加起来时,特别是当涉及页锁时,以及复杂的锁模型兼容性矩阵 http://msdn.microsoft.com/en-us/library/ms186396.aspx,增加的并发症哈希冲突 http://rusanu.com/2009/05/29/lockres-collision-probability-magic-marker-16777215/并考虑您所看到的锁变化的速度,我想说您最多可以做一个非常粗略的近似。除了进行具体的问题调查外,对此进行深入研究没有什么意义。我会很震惊地听到一个应用程序主动查看所持有的锁并使得any基于所看到的信息做出的决定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)