Udostępnij za pomocą


USTAW DEADLOCK_PRIORITY (Transact-SQL)

Dotyczy do:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (serverless SQL pool only)Baza danych SQL w Microsoft Fabric

Określa względne znaczenie, że bieżąca sesja kontynuuje przetwarzanie, jeśli jest zakleszczone z inną sesją.

Transact-SQL konwencje składni

Syntax

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

Arguments

LOW

Określa, że bieżąca sesja będzie ofiarą zakleszczenia, jeśli jest zaangażowana w impas, a inne sesje biorące udział w łańcuchu zakleszczenia mają priorytet zakleszczenia ustawiony na WARTOŚĆ NORMAL lub HIGH lub do wartości całkowitej większej niż -5. Bieżąca sesja nie będzie ofiarą zakleszczenia, jeśli inne sesje mają priorytet zakleszczenia ustawiony na wartość całkowitą mniejszą niż -5. Określa również, że bieżąca sesja kwalifikuje się do ofiary zakleszczenia, jeśli kolejna sesja ustawiła priorytet zakleszczenia ustawiony na LOW lub na wartość całkowitą równą -5.

NORMAL

Określa, że bieżąca sesja będzie ofiarą zakleszczenia, jeśli inne sesje biorące udział w łańcuchu zakleszczenia mają priorytet zakleszczenia ustawiony na WARTOŚĆ HIGH lub do wartości całkowitej większej niż 0, ale nie będzie ofiarą zakleszczenia, jeśli inne sesje mają priorytet zakleszczenia ustawiony na LOW lub do wartości całkowitej mniejszej niż 0. Określa również, że bieżąca sesja kwalifikuje się do ofiary zakleszczenia, jeśli inna sesja ustawi priorytet zakleszczenia na NORMAL lub na wartość całkowitą równą 0. NORMALNY jest domyślnym priorytetem.

HIGH

Określa, że bieżąca sesja będzie ofiarą zakleszczenia, jeśli inne sesje biorące udział w łańcuchu zakleszczenia mają priorytet zakleszczenia ustawiony na wartość całkowitą większą niż 5, lub kwalifikuje się do zakleszczenia ofiary, jeśli inna sesja również ustawi priorytet zakleszczenia na WYSOKI lub do wartości całkowitej równej 5.

<priorytet liczbowy>

Jest zakresem wartości całkowitych (-10 do 10), aby zapewnić 21 poziomów priorytetu zakleszczenia. Określa, że bieżąca sesja będzie ofiarą zakleszczenia, jeśli inne sesje w łańcuchu zakleszczenia działają z wyższą wartością priorytetu zakleszczenia, ale nie będzie ofiarą zakleszczenia, jeśli inne sesje są uruchomione przy wartości priorytetu zakleszczenia niższe niż wartość bieżącej sesji. Określa również, że bieżąca sesja kwalifikuje się do zakleszczenia ofiary, jeśli inna sesja jest uruchomiona z wartością priorytetu zakleszczenia, która jest taka sama jak bieżąca sesja. NISKIE mapuje na -5, NORMALNY do 0 i WYSOKI do 5.

@ deadlock_var

Jest zmienną znakową określającą priorytet zakleszczenia. Zmienna musi być ustawiona na wartość "LOW", "NORMAL" lub "HIGH". Zmienna musi być wystarczająco duża, aby przechowywać cały ciąg.

@ deadlock_intvar

Jest zmienną całkowitą określającą priorytet zakleszczenia. Zmienna musi być ustawiona na wartość całkowitą w zakresie (-10 na 10).

Remarks

Zakleszczenia pojawiają się, gdy dwie sesje czekają na dostęp do zasobów zablokowanych przez drugą. Gdy wystąpienie programu SQL Server wykryje, że dwie sesje są zakleszczone, rozwiązuje impas, wybierając jedną z sesji jako ofiarę zakleszczenia. Bieżąca transakcja ofiary jest cofana i komunikat o błędzie zakleszczenia 1205 jest zwracany do klienta. Spowoduje to wydanie wszystkich blokad przechowywanych przez tę sesję, co umożliwi kontynuowanie drugiej sesji.

Która sesja jest wybierana jako ofiara zakleszczenia zależy od priorytetu zakleszczenia każdej sesji:

  • Jeśli obie sesje mają taki sam priorytet zakleszczenia, wystąpienie programu SQL Server wybiera sesję, która jest tańsza, aby wycofać się jako ofiara zakleszczenia. Jeśli na przykład obie sesje ustawiły priorytet zakleszczenia na WYSOKI, wystąpienie wybierze jako ofiarę sesji, która szacuje, jest mniej kosztowna, aby wycofać. Koszt jest określany przez porównanie liczby bajtów dziennika zapisanych w tym punkcie w każdej transakcji. (Ta wartość jest widoczna jako "Używany dziennik" na wykresie zakleszczenia).

  • Jeśli sesje mają różne priorytety zakleszczenia, sesja z najniższym priorytetem zakleszczenia zostanie wybrana jako ofiara zakleszczenia.

ZESTAW DEADLOCK_PRIORITY jest ustawiany w czasie wykonywania lub wykonywania, a nie w czasie analizy.

Ta składnia nie jest obsługiwana w dedykowanych pulach SQL w usłudze Azure Synapse Analytics. Jest ona obsługiwana w bezserwerowych pulach SQL w usłudze Azure Synapse Analytics.

Permissions

Wymaga członkostwa w publicznej roli .

Examples

W poniższym przykładzie użyto zmiennej w celu ustawienia priorytetu zakleszczenia na LOWwartość .

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

W poniższym przykładzie ustawiono priorytet zakleszczenia na NORMALwartość .

SET DEADLOCK_PRIORITY NORMAL;
GO

Dalsze kroki