SET DEADLOCK_PRIORITY (Transact-SQL)
Especifica a importância relativa do processamento contínuo da sessão atual se for bloqueada com outra sessão.
Sintaxe
SET DEADLOCK_PRIORITY { LOW | NORMAL | HIGH | <numeric-priority> | @deadlock_var | @deadlock_intvar }
<numeric-priority> ::= { -10 | -9 | -8 | … | 0 | … | 8 | 9 | 10 }
Argumentos
LOW
Especifica que a sessão atual será a vítima de deadlock se estiver envolvida em deadlock e outras sessões envolvidas na cadeia de deadlock tiverem prioridade definida como NORMAL ou HIGH ou para um valor de inteiro superior a -5. A sessão atual não será vítima de deadlock se outras sessões forem definidas como prioridade de deadlock como um valor inteiro inferior a -5. Ela também especifica que a sessão atual é elegível para ser vítima de deadlock se outra sessão tiver sido definida com prioridade de deadlock LOW ou um valor inteiro igual a -5.NORMAL
Especifica que a sessão atual será a vítima de deadlock se outras sessões envolvidas na cadeia de deadlock tiverem prioridade de deadlock definida como HIGH ou para um valor de inteiro superior a 0, mas não será vítima de deadlock se outras sessões estiverem definidas com prioridade de deadlock LOW ou valor inteiro inferior a 0. Ela também especifica que a sessão atual é elegível para ser vítima de deadlock se outra sessão tiver sido definida com prioridade de deadlock NORMAL ou um valor inteiro igual a 0. NORMAL é a prioridade padrão.HIGH
Especifica que a sessão atual será a vítima de deadlock se outras sessões envolvidas na cadeia de deadlock tiverem prioridade de deadlock definida como um valor de inteiro superior a 5 ou é elegível como vítima de deadlock se outra sessão tiver sido definida com prioridade de deadlock HIGH ou valor inteiro igual a 5.<numeric-priority>
É um intervalo de valor inteiro (-10 a 10) para fornecer 21 níveis de prioridade de deadlock. Especifica que a sessão atual será a vítima de deadlock se outras sessões na cadeia de deadlock estiverem em execução em um valor de prioridade de deadlock superior, mas não será a vítima de deadlock se outras sessões estiverem em execução em um valor de prioridade de deadlock inferior ao valor da sessão atual. Ela também especifica que a sessão atual é elegível para ser vítima de deadlock se outra sessão estiver em execução com um valor de prioridade de deadlock que seja igual ao da sessão atual. LOW mapeia para -5, NORMAL para 0 e HIGH para 5.**@**deadlock_var
É uma variável de caractere que especifica a prioridade de deadlock. A variável deve ser definida como um valor de 'LOW', 'NORMAL' ou 'HIGH'. A variável deve ser grande o suficiente para reter a cadeia de caracteres completa.**@**deadlock_intvar
É uma variável de inteiro que especifica a prioridade de deadlock. A variável deve ser definida como um valor de inteiro no intervalo (-10 a 10).
Comentários
Surgem deadlocks quando duas sessões estão aguardando acesso a recursos bloqueados por outra. Quando uma instância do SQL Server detecta que duas sessões estão com deadlock, ela soluciona o deadlock escolhendo um das sessões como uma vítima de deadlock. A transação atual da vítima é revertida e a mensagem de erro 1205 de deadlock é retornada ao cliente. Isso libera todos os bloqueios retidos por essa sessão, permitindo que a outra sessão continue.
A escolha de qual sessão será a vítima de deadlock depende da prioridade de deadlock de cada sessão:
Se ambas as sessões tiverem a mesma prioridade de deadlock, a instância do SQL Server escolhe a sessão que é menos dispendiosa para ser revertida como a vítima de deadlock. Por exemplo, se ambas as sessões tiverem definido sua prioridade de deadlock como HIGH, a instância escolherá como uma vítima a sessão que calcula ser menos dispendiosa para reverter.
Se as sessões tiverem prioridades de deadlock diferentes, a sessão com a prioridade de deadlock mais baixa será escolhida como a vítima de deadlock.
SET DEADLOCK_PRIORITY é definida ao executar ou no tempo de execução e não no tempo da análise.
Permissões
Requer associação na função pública.
Exemplos
O exemplo a seguir usa uma variável para definir a prioridade de deadlock como LOW.
DECLARE @deadlock_var NCHAR(3);
SET @deadlock_var = N'LOW';
SET DEADLOCK_PRIORITY @deadlock_var;
GO
O exemplo a seguir define a prioridade de deadlock como NORMAL.
SET DEADLOCK_PRIORITY NORMAL;
GO
Consulte também