Dela via


SET DEADLOCK_PRIORITY (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (endast serverlös SQL-pool)

Anger den relativa betydelse som den aktuella sessionen fortsätter att bearbeta om den är låst med en annan session.

Transact-SQL syntaxkonventioner

Syntax

SET DEADLOCK_PRIORITY { LOW | NORMAL | HIGH | <numeric-priority> | @deadlock_var | @deadlock_intvar }
  
<numeric-priority> ::= { -10 | -9 | -8 | ... | 0 | ... | 8 | 9 | 10 }

Arguments

LOW

Anger att den aktuella sessionen kommer att vara ett dödlägesoffer om den är inblandad i ett dödläge och andra sessioner som är involverade i dödlägeskedjan har prioriteten för dödläget inställd på antingen NORMAL eller HÖG eller till ett heltalsvärde större än -5. Den aktuella sessionen kommer inte att vara ett dödlägesoffer om de andra sessionerna har en prioritet för dödläge inställt på ett heltalsvärde som är mindre än -5. Den anger också att den aktuella sessionen är berättigad att vara ett dödlägesoffer om en annan session har angett prioritet för dödläget inställd på LOW eller till ett heltalsvärde som är lika med -5.

NORMAL

Anger att den aktuella sessionen kommer att vara ett dödlägesoffer om andra sessioner som är involverade i dödlägeskedjan har prioriteten för dödläget inställd på HÖG eller till ett heltalsvärde större än 0, men inte är det dödläge som är offer för dödläget om de andra sessionerna har prioriteten för dödläget inställd på LÅG eller till ett heltalsvärde som är mindre än 0. Den anger också att den aktuella sessionen är berättigad att vara ett dödlägesoffer om en annan session har angett prioritet för dödläge till NORMAL eller till ett heltalsvärde som är lika med 0. NORMAL är standardprioriteten.

HIGH

Anger att den aktuella sessionen kommer att vara ett dödlägesoffer om andra sessioner som ingår i dödlägeskedjan har prioritet för dödläget inställt på ett heltalsvärde större än 5, eller är berättigad att vara ett dödlägesoffer om en annan session också har angett prioritet för dödläge till HÖG eller till ett heltalsvärde som är lika med 5.

<numerisk prioritet>

Är ett heltalsvärdeintervall (-10 till 10) för att ge 21 nivåer av prioritet för dödläge. Den anger att den aktuella sessionen kommer att vara ett dödlägesoffer om andra sessioner i dödlägeskedjan körs med ett högre prioritetsvärde för dödläget, men inte blir ett dödlägesoffer om de andra sessionerna körs med ett prioritetsvärde för dödläge som är lägre än värdet för den aktuella sessionen. Den anger också att den aktuella sessionen är berättigad att vara ett dödlägesoffer om en annan session körs med ett prioritetsvärde för dödläge som är samma som den aktuella sessionen. LÅG kartor till -5, NORMAL till 0 och HÖG till 5.

@ deadlock_var

Är en teckenvariabel som anger prioriteten för dödläget. Variabeln måste anges till värdet "LOW", "NORMAL" eller "HIGH". Variabeln måste vara tillräckligt stor för att innehålla hela strängen.

@ deadlock_intvar

Är en heltalsvariabel som anger prioriteten för dödläget. Variabeln måste anges till ett heltalsvärde i intervallet (-10 till 10).

Remarks

Dödlägen uppstår när två sessioner båda väntar på åtkomst till resurser som är låsta av den andra. När en instans av SQL Server upptäcker att två sessioner är låsta löser den dödläget genom att välja en av sessionerna som ett dödlägesoffer. Den aktuella transaktionen för offret återställs och felmeddelandet 1205 returneras till klienten. Detta frigör alla lås som innehas av den sessionen, så att den andra sessionen kan fortsätta.

Vilken session som väljs som dödlägesoffer beror på varje sessions prioritet för dödläge:

  • Om båda sessionerna har samma prioritet för dödläget väljer instansen av SQL Server den session som är billigare att återställa som dödlägesoffer. Om båda sessionerna till exempel har angett sin prioritet för dödläget till HÖG, väljer instansen som offer den session som den uppskattar är billigare att återställa. Kostnaden bestäms genom att jämföra antalet loggbyte som skrivits till den punkten i varje transaktion. (Du kan se det här värdet som "Log Used" i ett dödlägesdiagram).

  • Om sessionerna har olika prioriteter för dödläget väljs sessionen med den lägsta prioriteten för dödläget som ett dödlägesoffer.

SET DEADLOCK_PRIORITY anges vid körnings- eller körningstid och inte vid parsningstid.

Den här syntaxen stöds inte i dedikerade SQL-pooler i Azure Synapse Analytics. Det stöds i serverlösa SQL-pooler i Azure Synapse Analytics.

Permissions

Kräver medlemskap i offentlig roll.

Examples

I följande exempel används en variabel för att ange prioriteten för dödläge till LOW.

DECLARE @deadlock_var NCHAR(3);
SET @deadlock_var = N'LOW';
  
SET DEADLOCK_PRIORITY @deadlock_var;
GO

I följande exempel anges prioriteten för dödläget till NORMAL.

SET DEADLOCK_PRIORITY NORMAL;
GO

Next steps