Dela via


Analysera dödlägen med SQL Server Profiler

gäller för:SQL ServerAzure SQL Managed Instance

Använd SQL Server Profiler för att identifiera orsaken till ett dödläge. Ett dödläge uppstår när det finns ett cykliskt beroende mellan två eller flera trådar, eller processer, för vissa uppsättningar resurser i SQL Server. Med SQL Server Profiler kan du skapa en spårning som registrerar, spelar upp och visar dödlägeshändelser för analys.

Om du vill spåra dödlägeshändelser lägger du till händelseklassen Deadlock graph i en spårning. Den här händelseklassen fyller i datakolumnen TextData i spårningen med XML-data om processen och objekt som ingår i dödläget. SQL Server Profiler kan extrahera XML-dokumentet till en deadlock XML-fil (.xdl) som du kan visa senare i SQL Server Management Studio. Du kan konfigurera SQL Server Profiler för att extrahera Deadlock Graph-händelser till en enda fil som innehåller alla Deadlock Graph-händelser eller för att separera filer. Den här extraheringen kan göras på något av följande sätt:

  • Vid spårningskonfigurationen använder du fliken Inställningar för extrahering av händelser . Den här fliken visas inte förrän du väljer deadlock-grafhändelsen på fliken Val av händelser .

  • Använd alternativet Extrahera SQL Server-händelsermenyn Arkiv .

  • Enskilda händelser kan också extraheras och sparas genom att högerklicka på en specifik händelse och välja Extrahera händelsedata.

Deadlock-grafer

SQL Server Profiler och SQL Server Management Studio använder ett väntediagram för dödläge för att beskriva ett dödläge. Väntediagrammet för dödläget innehåller processnoder, resursnoder och kanter som representerar relationerna mellan processerna och resurserna. Komponenterna i väntediagram definieras i följande tabell:

Nod Beskrivning
Processnod En tråd som utför en uppgift. till exempel INSERT, UPDATE, eller DELETE.
Resursnod Ett databasobjekt; till exempel en tabell, ett index eller en rad.
Kant En relation mellan en process och en resurs. En begärandegräns inträffar när en process väntar på en resurs. En ägargräns inträffar när en resurs väntar på en process. Låsläget ingår i kantbeskrivningen. Till exempel Läge: X.

Blockeringsprocessnod

I ett väntediagram innehåller processnoden information om processen. I följande tabell beskrivs komponenterna i en process.

Komponent Definition
Serverprocess-ID Sessions-ID (SPID), en servertilldelad identifierare för processen som äger låset.
Server batch-ID Server batch identifier (SBID).
Körningskontext-ID Körningskontextidentifierare (ECID). Körningskontext-ID för en viss tråd som är associerad med ett specifikt sessions-ID.

ECID = { 0, 1, 2, 3, ... n }, där 0 alltid representerar huvudtråden eller den överordnade tråden, och { 1, 2, 3, ... n } representerar undertrådarna.
Dödlägesprioritet Prioritet för dödlåshantering för processen. Mer information om möjliga värden finns i SET DEADLOCK_PRIORITY.
Logg som används Mängden loggutrymme som används av processen.
Ägar-ID Transaktions-ID för de processer som använder transaktioner och som för närvarande väntar på ett lås.
Transaktionsbeskrivning Pekare till transaktionsbeskrivningen som beskriver transaktionens tillstånd.
Inputbuffer Indatabuffert för den aktuella processen definierar vilken typ av händelse och instruktion som körs. Möjliga värden är:

Språk
RPC
Ingen
Uttalande Typ av uttalande. Möjliga värden är:

NOP
VÄLJ
UPPDATERA
INFOGA
TA BORT
Okänd

Nod för resursdödläge

I ett dödläge väntar två processer på en resurs som innehas av den andra processen. I ett dödlägesdiagram visas resurserna som resursnoder.