使用PAGELATCH_ *等待类型阻止的会话?


9

编辑:为什么会话报告被阻止但正在等待PAGELATCH_*,而没有LCK_M_相关的等待类型?

以前,我假定SQL Server仅在blocking_session_Id列中报告阻塞会话。如果被阻止的会话正在等待逻辑锁,而不是其他诸如“ PAGELATCH_*

在此处输入图片说明


看起来许多并发会话正在将数据插入表中。您可以将表结构与索引一起发布吗?
金莎(Kin Shah)2015年

@Kin由SPID 69、82和84开始插入的表确实具有使用IDENTITY(1,1)属性定义的聚集索引,因此可能是最后一页插入争用的情况,但是在此阶段,我更感兴趣为什么被阻止的会话正在使用与非锁定相关的等待类型进行等待。同样有趣的是,SPID 93试图将XLOCK放到一个完全不相关的表上,该表与从64中选择的表有关。–
像素化

Answers:


6

我以前曾假设,如果被阻止的会话正在等待逻辑锁,而不是诸如的其他任何东西,则SQL Server仅在blocking_session_id列中报告一个被阻止的会话PAGELATCH_*

您正在使用Adam Machanic的sp_WhoIsActive过程,而不是内置的SQL Server工具。亚当的程序报告了所有“有趣的”阻塞原因,而不仅仅是锁阻塞。基础信息来自各种来源,包括sysprocessessys.dm_exec_requestssys.dm_os_waiting_tasks

任务可以等待锁以外的其他事情。例如,它可能能够获取页面上某行的排他锁,但随后仍必须等待获取排他页面锁存器(因为其他任务已经以不兼容的模式锁存了同一页)。

在您的示例中,PAGELATCH_EX排他页锁存器位于常规数据或索引页上,而不是PFS,GAM,SGAM,DCM或BCM页,如wait_info末尾的(*)所示

您可以在sp_WhoIsActive 此处找到文档(博客条目)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.