SET DEADLOCK_PRIORITY (Transact-SQL)

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.

Icône Lien de rubriqueConventions de la syntaxe de 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 du blocage si un blocage se produit et que les priorités des autres sessions impliquées dans la chaîne de blocage sont définies sur NORMAL ou HIGH ou définies 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 du blocage si la valeur de priorité des autres sessions impliquées dans la chaîne de blocage est définie sur HIGH ou sur un entier supérieur à 0. La session active ne sera pas la victime du blocage si les priorités des autres sessions impliquées sont définies 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).

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

Autorisations

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

Exemple

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