Edytowane: Dlaczego raportowanie sesji jest blokowane, ale czeka z PAGELATCH_*
, a nie LCK_M_
powiązane typy oczekiwania?
Wcześniej zakładałem, że SQL Server zgłasza tylko sesje blokujące w kolumnie blocking_session_Id. Jeśli zablokowane sesje czekały na logiczną blokadę, a nie na nic innego, jak np PAGELATCH_*
.
Odpowiedzi:
Używasz
sp_WhoIsActive
procedury Adama Machanica , a nie wbudowanego narzędzia SQL Server. Procedura Adama zgłasza wszystkie „interesujące” przyczyny blokowania, a nie tylko blokowanie blokady. Podstawowe informacje pochodzą z różnych źródeł, w tym sysprocesses , sys.dm_exec_requests i sys.dm_os_waiting_tasks .Zadanie może czekać na inne rzeczy oprócz blokady. Może być w stanie, na przykład, do nabycia blokady na rzędzie na stronie, ale nadal musi czekać do nabycia wyłączne strony zatrzask (ze względu na inne zadania, które podtrzymywane tej samej strony w trybie niezgodnego).
W twoim przykładzie
PAGELATCH_EX
wyłączne zatrzaski strony znajdują się na zwykłych stronach danych lub indeksach, a nie na stronach PFS, GAM, SGAM, DCM lub BCM, jak wskazano (*) na końcu instrukcji wait_info .Dokumentację (wpisy na blogu) można znaleźć
sp_WhoIsActive
tutaj .źródło