Sdílet prostřednictvím


NASTAV DEADLOCK_PRIORITY (Transact-SQL)

Platí na:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (serverless SQL pool only)SQL databáze v Microsoft Fabric

Určuje relativní důležitost, kterou aktuální relace pokračuje ve zpracování, pokud je zablokovaná s jinou relací.

Transact-SQL konvence syntaxe

Syntax

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

Arguments

LOW

Určuje, že aktuální relace bude obětí vzájemného zablokování, pokud je zapojena do vzájemného zablokování a jiné relace zapojené do řetězu vzájemného zablokování mají prioritu vzájemného zablokování nastavenou na HODNOTU NORMAL nebo HIGH nebo na celočíselnou hodnotu větší než -5. Aktuální relace nebude obětí vzájemného zablokování, pokud ostatní relace mají prioritu vzájemného zablokování nastavenou na celočíselnou hodnotu menší než -5. Určuje také, že aktuální relace může být obětí vzájemného zablokování, pokud jiná relace nastavila prioritu vzájemného zablokování nastavenou na HODNOTU LOW nebo na celočíselnou hodnotu rovnající se hodnotě -5.

NORMAL

Určuje, že aktuální relace bude obětí vzájemného zablokování, pokud jiné relace zapojené do řetězu vzájemného zablokování mají nastavenou prioritu vzájemného zablokování nastavenou na HODNOTU HIGH nebo na celočíselnou hodnotu větší než 0, ale nebude obětí vzájemného zablokování, pokud ostatní relace mají prioritu vzájemného zablokování nastavenou na LOW nebo na celočíselnou hodnotu menší než 0. Určuje také, že aktuální relace může být obětí vzájemného zablokování, pokud jiná relace nastavila prioritu vzájemného zablokování na HODNOTU NORMAL nebo na celočíselnou hodnotu rovnající se 0. Normal je výchozí priorita.

HIGH

Určuje, že aktuální relace bude obětí vzájemného zablokování, pokud jiné relace zapojené do řetězu vzájemného zablokování mají nastavenou prioritu vzájemného zablokování nastavenou na celočíselnou hodnotu větší než 5, nebo je oprávněna být obětí vzájemného zablokování, pokud jiná relace také nastavila prioritu vzájemného zablokování na HODNOTU HIGH nebo na celočíselnou hodnotu rovnající se 5.

<číselná priorita>

Je celočíselná oblast hodnot (-10 až 10), která poskytuje 21 úrovní priority vzájemného zablokování. Určuje, že aktuální relace bude obětí vzájemného zablokování, pokud ostatní relace v řetězci vzájemného zablokování běží s vyšší hodnotou priority vzájemného zablokování, ale nebude obětí vzájemného zablokování, pokud ostatní relace běží na hodnotě priority vzájemného zablokování nižší než hodnota aktuální relace. Určuje také, že aktuální relace může být obětí vzájemného zablokování, pokud je spuštěná jiná relace s hodnotou priority vzájemného zablokování, která je stejná jako aktuální relace. LOW mapuje na -5, NORMAL až 0 a HIGH až 5.

@ deadlock_var

Je znaková proměnná určující prioritu vzájemného zablokování. Proměnná musí být nastavená na hodnotu LOW, NORMAL nebo HIGH. Proměnná musí být dostatečně velká, aby držela celý řetězec.

@ deadlock_intvar

Je celočíselná proměnná určující prioritu vzájemného zablokování. Proměnná musí být nastavena na celočíselnou hodnotu v rozsahu (-10 až 10).

Remarks

Vzájemné zablokování vzniká, když obě relace čekají na přístup k prostředkům uzamčeným druhým. Když instance SQL Serveru zjistí, že jsou dvě relace zablokované, vyřeší zablokování výběrem jedné z relací jako oběti vzájemného zablokování. Aktuální transakce oběti je vrácena zpět a chybová zpráva 1205 je vrácena klientovi. Tím se uvolní všechny zámky, které tato relace uchovává, což umožní pokračování druhé relace.

Která relace je zvolena jako oběť vzájemného zablokování, závisí na prioritě vzájemného zablokování každé relace:

  • Pokud mají obě relace stejnou prioritu vzájemného zablokování, instance SQL Serveru zvolí relaci, která je levnější, aby se vrátila zpět jako oběť vzájemného zablokování. Pokud například obě relace nastavily prioritu vzájemného zablokování na HODNOTU HIGH, instance zvolí jako oběť relaci, která odhadne, je méně nákladná, aby se vrátila zpět. Náklady jsou určeny porovnáním počtu bajtů protokolu zapsaných k bodě každé transakce. (Tuto hodnotu můžete zobrazit jako log used (Log Used) v grafu vzájemného zablokování.

  • Pokud mají relace různé priority vzájemného zablokování, relace s nejnižší prioritou vzájemného zablokování se vybere jako oběť vzájemného zablokování.

SET DEADLOCK_PRIORITY je nastavena při spuštění nebo spuštění, a ne v době analýzy.

Tato syntaxe se ve vyhrazených fondech SQL ve službě Azure Synapse Analytics nepodporuje. Podporuje se v bezserverových fondech SQL ve službě Azure Synapse Analytics.

Permissions

Vyžaduje členství ve veřejné roli .

Examples

Následující příklad používá proměnnou k nastavení priority vzájemného zablokování na LOW.

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

Následující příklad nastaví prioritu vzájemného zablokování na NORMAL.

SET DEADLOCK_PRIORITY NORMAL;
GO

Další kroky