SET DEADLOCK_PRIORITY (Transact-SQL)

S’applique à : Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics (pool SQL serverless uniquement)

Indique l'importance relative liée à la poursuite du traitement par la session active si cette dernière est bloquée avec une autre session.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

LOW

Indique que la session active sera la victime de l'interblocage si elle est impliquée dans un interblocage et si la valeur de la priorité des autres sessions impliquées dans la chaîne d'interblocage est définie sur NORMAL ou HIGH ou sur une valeur entière supérieure à 5. La session active ne sera pas la victime du blocage si les priorités des autres sessions sont définies sur une valeur entière inférieure à 5. Indique également que la session active est éligible pour être la victime du blocage si la priorité d'une autre session est définie sur LOW ou sur une valeur entière égale à -5.

NORMAL

Indique que la session active sera la victime de l'interblocage si la valeur de la priorité des autres sessions impliquées dans la chaîne d'interblocage est définie sur HIGH ou sur une valeur entière supérieure à 0, mais elle ne sera pas une victime de l'interblocage si la valeur de priorité d'une autre session est définie sur LOW ou sur une valeur entière inférieure à 0. Indique également que la session active est éligible pour être la victime du blocage si la priorité d'une autre session est définie sur NORMAL ou sur une valeur entière égale à 0. La valeur de la priorité par défaut est NORMAL.

HIGH

Indique que la session active sera la victime du blocage si la valeur de la priorité des autres sessions impliquées dans la chaîne de blocage est un entier supérieur à 5, ou qu'elle est éligible pour être la victime du stockage si la priorité d'une autre session est également définie sur HIGH ou sur une valeur entière égale à 5.

<numeric-priority>

Plage de valeurs entières (-10 à 10) pour fournir 21 niveaux de priorité de blocage. Indique que la session active sera la victime du blocage si la valeur de la priorité de blocage des autres sessions de la chaîne de blocage est supérieure et qu'elle ne sera pas la victime du blocage si la valeur de la priorité de blocage des autres sessions est inférieure. Indique également que la session active est éligible pour être la victime du blocage si la valeur de la priorité d'une autre session est identique. LOW correspond à -5, NORMAL à 0 et HIGH à 5.

@deadlock_var

Variable de type chaîne de caractères spécifiant la priorité du blocage. La valeur de la variable doit être définie sur « LOW' », « NORMAL » ou « HIGH ». Elle doit être suffisamment importante pour contenir toute la chaîne.

@deadlock_intvar

Variable de type entier spécifiant la priorité du blocage. Elle doit être définie sur une valeur entière comprise dans la plage (-10 - 10)

Notes

Un blocage se produit lorsque deux sessions sont en attente d'un accès aux ressources verrouillées par l'autre session. Si une instance SQL Server détecte le blocage de deux sessions, l'une des sessions est choisie comme victime du blocage afin de résoudre ce problème. La transaction active de la victime est annulée et le message d'erreur 1205 est retourné au client. Tous les verrous détenus par cette session sont libérés et le traitement des autres sessions peut se poursuivre.

La session choisie comme victime du blocage varie en fonction de la priorité de blocage des deux sessions :

  • Si la valeur de la priorité de blocage des deux sessions est identique, l'instance SQL Server choisit la session pour laquelle l'annulation est la moins onéreuse comme victime du blocage. Par exemple, si la priorité des deux sessions est définie sur HIGH, l'instance choisit comme victime la session pour laquelle l'annulation est la moins coûteuse (estimation). Le coût est déterminé en comparant le nombre d’octets du journal écrit à ce stade dans chaque transaction. (Cette valeur est indiquée par « Journal utilisé » dans un graphique de blocage.)

  • Si les priorités de blocage des sessions sont différentes, la session dont la priorité de blocage est inférieure est choisie comme victime du blocage.

L'option SET DEADLOCK_PRIORITY est définie lors de l'exécution, et non pas durant l'analyse.

Cette syntaxe n’est pas prise en charge dans les pools SQL dédiés dans Azure Synapse Analytics. Elle est prise en charge pour les pools SQL serverless dans Azure Synapse Analytics.

Autorisations

Nécessite l'appartenance au rôle public .

Exemples

L'exemple suivant utilise une variable pour définir la priorité de blocage sur LOW.

DECLARE @deadlock_var NCHAR(3);
SET @deadlock_var = N'LOW';
  
SET DEADLOCK_PRIORITY @deadlock_var;
GO

L'exemple suivant définit la priorité de blocage sur NORMAL.

SET DEADLOCK_PRIORITY NORMAL;
GO

Étapes suivantes