Partilhar via


CONJUNTO DEADLOCK_PRIORITY (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (apenas pool SQL serverless)Base de dados SQL no Microsoft Fabric

Especifica a importância relativa de que a sessão atual continue processando se estiver bloqueada com outra sessão.

Transact-SQL convenções de sintaxe

Syntax

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

Arguments

LOW

Especifica que a sessão atual será a vítima de deadlock se estiver envolvida em um deadlock e outras sessões envolvidas na cadeia de deadlock tiverem prioridade de deadlock definida como NORMAL ou HIGH ou para um valor inteiro maior que -5. A sessão atual não será a vítima de bloqueio se as outras sessões tiverem prioridade de bloqueio definida para um valor inteiro inferior a -5. Ele também especifica que a sessão atual é qualificada para ser a vítima de deadlock se outra sessão tiver definido prioridade de deadlock definida como LOW ou para 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 inteiro maior que 0, mas não será a vítima de deadlock se as outras sessões tiverem prioridade de deadlock definida como LOW ou para um valor inteiro menor que 0. Ele também especifica que a sessão atual é qualificada para ser a vítima de deadlock se outra sessão tiver definido a prioridade de deadlock como NORMAL ou para 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 inteiro maior que 5, ou é elegível para ser a vítima de deadlock se outra sessão também tiver definido prioridade de deadlock como HIGH ou para um valor inteiro igual a 5.

<prioridade numérica>

É um intervalo de valores inteiros (-10 a 10) para fornecer 21 níveis de prioridade de deadlock. Ele especifica que a sessão atual será a vítima de deadlock se outras sessões na cadeia de deadlock estiverem sendo executadas com um valor de prioridade de deadlock mais alto, mas não será a vítima de deadlock se as outras sessões estiverem sendo executadas com um valor de prioridade de deadlock menor do que o valor da sessão atual. Ele também especifica que a sessão atual é qualificada para ser a vítima de deadlock se outra sessão estiver sendo executada com um valor de prioridade de deadlock 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 conter a cadeia de caracteres inteira.

@ deadlock_intvar

É uma variável inteira que especifica a prioridade de deadlock. A variável deve ser definida como um valor inteiro no intervalo (-10 a 10).

Remarks

Os impasses surgem quando duas sessões aguardam o acesso a recursos bloqueados pela outra. Quando uma instância do SQL Server deteta que duas sessões estão bloqueadas, ela resolve o impasse escolhendo uma das sessões como vítima de deadlock. A transação atual da vítima é revertida e a mensagem de erro de deadlock 1205 é retornada ao cliente. Isso libera todos os bloqueios mantidos por essa sessão, permitindo que a outra sessão prossiga.

A sessão escolhida como 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 reverter como vítima de deadlock. Por exemplo, se ambas as sessões tiverem definido sua prioridade de bloqueio como HIGH, a instância escolherá como vítima a sessão que estima ser menos dispendiosa para reverter. O custo é determinado comparando o número de bytes de log gravados até esse ponto em cada transação. (Você pode ver esse valor como "Log usado" em um gráfico de deadlock).

  • Se as sessões tiverem prioridades de bloqueio diferentes, a sessão com a prioridade de bloqueio mais baixa é escolhida como a vítima do impasse.

SET DEADLOCK_PRIORITY é definido em tempo de execução ou execução e não em tempo de análise.

Essa sintaxe não é suportada em pools SQL dedicados no Azure Synapse Analytics. Ele é suportado em pools SQL sem servidor no Azure Synapse Analytics.

Permissions

Requer adesão à função pública de .

Examples

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óximos passos