SET DEADLOCK_PRIORITY (Transact-SQL)SET DEADLOCK_PRIORITY (Transact-SQL)

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure sìAzure SQL Data Warehouse sìParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Specifica la priorità relativa della sessione corrente nel caso in cui venga coinvolta in un deadlock con un'altra sessione.Specifies the relative importance that the current session continue processing if it is deadlocked with another session.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

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

ArgomentiArguments

LOWLOW
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.Specifies that the current session will be the deadlock victim if it is involved in a deadlock and other sessions involved in the deadlock chain have deadlock priority set to either NORMAL or HIGH or to an integer value greater than -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.The current session will not be the deadlock victim if the other sessions have deadlock priority set to an integer value less than -5. 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.It also specifies that the current session is eligible to be the deadlock victim if another session has set deadlock priority set to LOW or to an integer value equal to -5.

NORMALNORMAL
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.Specifies that the current session will be the deadlock victim if other sessions involved in the deadlock chain have deadlock priority set to HIGH or to an integer value greater than 0, but will not be the deadlock victim if the other sessions have deadlock priority set to LOW or to an integer value less than 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.It also specifies that the current session is eligible to be the deadlock victim if another other session has set deadlock priority to NORMAL or to an integer value equal to 0. Il valore predefinito è NORMAL.NORMAL is the default priority.

HIGHHIGH
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.Specifies that the current session will be the deadlock victim if other sessions involved in the deadlock chain have deadlock priority set to an integer value greater than 5, or is eligible to be the deadlock victim if another session has also set deadlock priority to HIGH or to an integer value equal to 5.

<numeric-priority><numeric-priority>
Intervallo di valori interi (da -10 a 10) per fornire 21 livelli di priorità del deadlock.Is an integer value range (-10 to 10) to provide 21 levels of deadlock priority. 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.It specifies that the current session will be the deadlock victim if other sessions in the deadlock chain are running at a higher deadlock priority value, but will not be the deadlock victim if the other sessions are running at a deadlock priority value lower than the value of the current session. 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.It also specifies that the current session is eligible to be the deadlock victim if another session is running with a deadlock priority value that is the same as the current session. LOW corrisponde a -5, NORMAL a 0 e HIGH a 5.LOW maps to -5, NORMAL to 0, and HIGH to 5.

@ deadlock_var@ deadlock_var
Variabile di tipo carattere che specifica la priorità del deadlock.Is a character variable specifying the deadlock priority. La variabile deve essere impostata su uno dei valori seguenti: 'LOW', 'NORMAL' o 'HIGH'.The variable must be set to a value of 'LOW', 'NORMAL' or 'HIGH'. Le dimensioni della variabili devono essere tali da contenere l'intera stringa.The variable must be large enough to hold the entire string.

@ deadlock_intvar@ deadlock_intvar
Variabile di tipo integer che specifica la priorità del deadlock.Is an integer variable specifying the deadlock priority. La variabile deve essere impostata su un valore intero compreso nell'intervallo (da -10 a 10).The variable must be set to an integer value in the range (-10 to 10).

RemarksRemarks

Il deadlock si verifica quando due sessioni sono entrambe in attesa di accedere a risorse bloccate dall'altra sessione.Deadlocks arise when two sessions are both waiting for access to resources locked by the other. Quando un'istanza di SQL ServerSQL Server rileva che due sessioni sono coinvolte in un deadlock, risolve il deadlock scegliendo una delle sessioni come vittima del deadlock.When an instance of SQL ServerSQL Server detects that two sessions are deadlocked, it resolves the deadlock by choosing one of the sessions as a deadlock victim. 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.The current transaction of the victim is rolled back and deadlock error message 1205 is returned to the client. In questo modo tutti i blocchi della sessione vengono rilasciati e l'altra sessione può proseguire.This releases all of the locks held by that session, allowing the other session to proceed.

La scelta della sessione che sarà vittima del deadlock dipende dalla priorità di deadlock delle sessioni:Which session is chosen as the deadlock victim depends on each session's deadlock priority:

  • Se entrambe le sessioni hanno la stessa priorità di deadlock, l'istanza di SQL ServerSQL Server sceglie come vittima del deadlock la sessione per cui risulta meno oneroso eseguire il rollback.If both sessions have the same deadlock priority, the instance of SQL ServerSQL Server chooses the session that is less expensive to roll back as the deadlock victim. 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.For example, if both sessions have set their deadlock priority to HIGH, the instance will choose as a victim the session it estimates is less costly to roll back. Il costo viene determinato confrontando il numero di byte di log scritti in quel punto in ogni transazione.The cost is determined by comparing the number of log bytes written to that point in each transaction. Questo valore viene visualizzato come "Log utilizzato" in Deadlock Graph.(You can see this value as "Log Used" in a 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.If the sessions have different deadlock priorities, the session with the lowest deadlock priority is chosen as the deadlock victim.

L'opzione SET DEADLOCK_PRIORITY viene impostata in fase di esecuzione, non in fase di analisi.SET DEADLOCK_PRIORITY is set at execute or run time and not at parse time.

AutorizzazioniPermissions

È richiesta l'appartenenza al ruolo public .Requires membership in the public role.

EsempiExamples

Nell'esempio seguente viene utilizzata una variabile per impostare la priorità di deadlock su LOW.The following example uses a variable to set the deadlock priority to 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.The following example sets the deadlock priority to NORMAL.

SET DEADLOCK_PRIORITY NORMAL;  
GO  

Vedere ancheSee Also

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