SET DEADLOCK_PRIORITY (Transact-SQL)

Si applica a:database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics (solo pool SQL serverless)

Specifica la priorità relativa della sessione corrente nel caso in cui venga coinvolta in un deadlock con un'altra sessione.

Convenzioni di sintassi Transact-SQL

Sintassi

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

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

LOW

Specifica che la sessione corrente sarà vittima del deadlock se coinvolta in un deadlock e se la priorità di deadlock delle altre sessioni coinvolte nella catena del deadlock è impostata su NORMAL o HIGH o su un valore integer maggiore di -5. Se le altre sessioni dispongono di una priorità di deadlock impostata su un valore intero minore di -5, la sessione corrente non sarà vittima del deadlock. Specifica inoltre che la sessione corrente può essere vittima del deadlock se un'altra sessione dispone di una priorità di deadlock impostata su LOW o su un valore intero uguale a -5.

NORMAL

Specifica che la sessione corrente sarà vittima del deadlock se la priorità di deadlock delle altre sessioni coinvolte nella catena del deadlock è impostata su HIGH o su un valore integer maggiore di 0, ma non sarà tale se la priorità di deadlock delle altre sessioni è impostata su LOW o su un valore integer minore di 0. Specifica inoltre che la sessione corrente può essere vittima del deadlock se un'altra sessione dispone di una priorità di deadlock impostata su NORMAL o su un valore intero uguale a 0. Il valore predefinito è NORMAL.

HIGH

Specifica che la sessione corrente sarà vittima del deadlock se la priorità di deadlock delle altre sessioni coinvolte nella catena del deadlock è impostata su un valore intero maggiore di 5 oppure che può essere scelta come vittima del deadlock se la priorità di deadlock di un'altra sessione è anch'essa impostata su HIGH o su un valore intero uguale a 5.

<numeric-priority>

Intervallo di valori interi (da -10 a 10) per fornire 21 livelli di priorità del deadlock. Specifica che la sessione corrente sarà vittima del deadlock se altre sessioni della catena del deadlock vengono eseguite con una priorità di deadlock maggiore, ma non sarà vittima del deadlock se le altre sessioni vengono eseguite con la priorità di deadlock impostata su un valore minore di quello della sessione corrente. Specifica inoltre che la sessione corrente può essere vittima del deadlock se un'altra sessione viene eseguita con una priorità di deadlock uguale a quella della sessione corrente. LOW corrisponde a -5, NORMAL a 0 e HIGH a 5.

@deadlock_var

Variabile di tipo carattere che specifica la priorità del deadlock. La variabile deve essere impostata su uno dei valori seguenti: 'LOW', 'NORMAL' o 'HIGH'. Le dimensioni della variabili devono essere tali da contenere l'intera stringa.

@deadlock_intvar

Variabile di tipo integer che specifica la priorità del deadlock. La variabile deve essere impostata su un valore intero compreso nell'intervallo (da -10 a 10).

Osservazioni:

Il deadlock si verifica quando due sessioni sono entrambe in attesa di accedere a risorse bloccate dall'altra sessione. Quando un'istanza di SQL Server rileva che due sessioni sono coinvolte in un deadlock, risolve il deadlock scegliendo una delle sessioni come vittima del deadlock. Viene eseguito il rollback della transazione corrente della sessione vittima del deadlock e al client viene restituito il messaggio di errore relativo al deadlock 1205. In questo modo tutti i blocchi della sessione vengono rilasciati e l'altra sessione può proseguire.

La scelta della sessione che sarà vittima del deadlock dipende dalla priorità di deadlock delle sessioni:

  • Se entrambe le sessioni hanno la stessa priorità di deadlock, l'istanza di SQL Server sceglie come vittima del deadlock la sessione per cui risulta meno oneroso eseguire il rollback. Se, ad esempio, la priorità di deadlock di entrambe le sessioni è impostata su HIGH, l'istanza sceglierà come vittima la sessione per cui ritiene che sia meno oneroso eseguire il rollback. Il costo viene determinato confrontando il numero di byte di log scritti in quel punto in ogni transazione. Questo valore viene visualizzato come "Log utilizzato" in Deadlock Graph.

  • Se le priorità di deadlock delle sessioni sono diverse, come vittima del deadlock verrà scelta la sessione con la priorità di deadlock inferiore.

L'opzione SET DEADLOCK_PRIORITY viene impostata in fase di esecuzione, non in fase di analisi.

Questa sintassi non è supportata nei pool SQL dedicati in Azure Synapse Analytics. È supportato nei pool SQL serverless in Azure Synapse Analytics.

Autorizzazioni

È richiesta l'appartenenza al ruolo public .

Esempi

Nell'esempio seguente viene utilizzata una variabile per impostare la priorità di deadlock su LOW.

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

Nell'esempio seguente la priorità di deadlock viene impostata su NORMAL.

SET DEADLOCK_PRIORITY NORMAL;
GO

Passaggi successivi