SET DEADLOCK_PRIORITY (Transact-SQL)

Aplica-se a:Banco de Dados SQL do AzureAzure Synapse Analytics (apenas pool de SQL sem servidor)Azure Synapse Analytics (somente pool de SQL sem servidor)

Especifica a importância relativa do processamento contínuo da sessão atual se for bloqueada com outra sessão.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

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 de deadlock 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. O custo é determinado comparando o número de bytes de log gravados naquele ponto em cada transação. (Você pode ver esse valor como "Log Utilizado" em um gráfico de deadlock).

  • 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.

Essa sintaxe não tem suporte em pools de SQL dedicados no Azure Synapse Analytics. Há suporte em pools de SQL sem servidor no Azure Synapse Analytics.

Permissões

Requer associação à 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

Próximas etapas