Condividi tramite


SET DEADLOCK_PRIORITY (Transact-SQL)

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

Icona di collegamento a un argomentoConvenzioni della 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 }

Argomenti

LOW

Specifica che la sessione corrente sarà vittima del deadlock se è coinvolta in un deadlock e la priorità di deadlock delle altre sessioni coinvolte nel catena del deadlock è impostata su NORMAL o HIGH o su un valore integer maggiore di -5. La sessione corrente non sarà vittima del deadlock se la priorità di deadlock delle altre sessioni è impostata su un valore integer minore di -5. Specifica inoltre che la sessione corrente può essere scelta come vittima del deadlock se la priorità di deadlock di un'altra sessione è impostata su LOW o su un valore integer 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à vittima del deadlock 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 scelta come vittima del deadlock se la priorità di deadlock di un'altra sessione è impostata su NORMAL o su un valore integer uguale a 0. L'impostazione predefinita della priorità è 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 integer 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 integer uguale a 5.

<numeric-priority>

Intervallo di valori integer (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 integer 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.
  • 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.

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

Vedere anche

Riferimento

@@LOCK_TIMEOUT (Transact-SQL)
SET (Transact-SQL)
SET LOCK_TIMEOUT (Transact-SQL)

Altre risorse

Rilevamento e interruzione di deadlock
Personalizzazione del timeout del blocco

Guida in linea e informazioni

Assistenza su SQL Server 2005