Blockierte Sitzungen, die mit PAGELATCH_ * -Wartetypen warten?

9

Bearbeitet: Warum werden Sitzungsberichte blockiert, warten aber mit PAGELATCH_*und nicht LCK_M_verwandten Wartetypen?

Ich habe zuvor angenommen, dass SQL Server nur blockierende Sitzungen in der Spalte blockierende_Session_Id meldet. Wenn die blockierten Sitzungen auf eine logische Sperre warteten und nichts anderes wie a PAGELATCH_*.

Geben Sie hier die Bildbeschreibung ein

Pixeliert
quelle
Es sieht so aus, als würden viele gleichzeitige Sitzungen Daten in die Tabelle einfügen. Können Sie die Tabellenstruktur zusammen mit Indizes veröffentlichen?
Kin Shah
@Kin die von den SPIDs 69, 82 und 84 eingefügte Tabelle hat einen Clustered-Index, der mit einer IDENTITY (1,1) -Eigenschaft definiert ist, sodass es sich möglicherweise um einen Konflikt beim Einfügen der letzten Seite handelt, aber in diesem Stadium bin ich mehr daran interessiert Warum warten die blockierten Sitzungen mit einem nicht sperrenden Warte-Typ? Interessanterweise versucht SPID 93 auch, einen XLOCK auf eine völlig unabhängige Tabelle zu der Tabelle zu setzen, aus der bis 64 ausgewählt wird.
Pixelated

Antworten:

6

Ich habe zuvor angenommen, dass SQL Server eine blockierende Sitzung nur in der Spalte blockierende_session_id melden würde, wenn die blockierten Sitzungen auf eine logische Sperre warten und nicht auf etwas anderes wie a PAGELATCH_*.

Sie verwenden die sp_WhoIsActiveProzedur von Adam Machanic , keine integrierte SQL Server-Funktion. Adams Verfahren meldet alle "interessanten" Ursachen für das Blockieren, nicht nur das Sperren von Sperren. Die zugrunde liegenden Informationen stammen aus verschiedenen Quellen, einschließlich sysprocesses , sys.dm_exec_requests und sys.dm_os_waiting_tasks .

Eine Aufgabe kann neben einer Sperre auf andere Dinge warten. Es kann in der Lage sein, beispielsweise eine exklusive Sperre auf einer Zeile auf einer Seite zu erwerben, aber dann noch warten müssen , um eine exklusive Seite zu erwerben Riegel (weil andere Aufgaben die gleiche Seite in einem nicht kompatiblen Modus verriegelt haben).

In Ihrem Beispiel befinden sich die PAGELATCH_EXexklusiven Seiten-Latches auf regulären Daten- oder Indexseiten, nicht auf PFS-, GAM-, SGAM-, DCM- oder BCM-Seiten, wie durch (*) am Ende der wait_info angegeben .

Die Dokumentation (Blogeinträge) finden Sie sp_WhoIsActive hier .

Paul White 9
quelle