SET DEADLOCK_PRIORITY (Transact-SQL)

Especifica la importancia relativa de que la sesión actual se siga procesando si existe un interbloqueo con otra sesión.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL (Transact-SQL)

Sintaxis

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 la sesión actual será el sujeto de interbloqueo si está implicada en un interbloqueo y el resto de las sesiones implicadas en la cadena de interbloqueos tienen la prioridad de interbloqueo establecida en NORMAL, HIGH o en un valor entero superior a -5. La sesión actual no será el sujeto de interbloqueo si el resto de las sesiones tienen la prioridad de interbloqueo establecida en un valor entero inferior a -5. Además, especifica que la sesión actual puede ser el sujeto de interbloqueo si otra sesión tiene la prioridad de interbloqueo establecida en LOW o en un valor entero igual a -5.

  • NORMAL
    Especifica que la sesión actual será el sujeto de interbloqueo si el resto de las sesiones implicadas en la cadena de interbloqueos tienen la prioridad de interbloqueo establecida en HIGH o en un valor entero superior a 0, pero no será el sujeto de interbloqueo si el resto de las sesiones tienen la prioridad de interbloqueo establecida en LOW o en un valor entero inferior a 0. Además, especifica que la sesión actual puede ser el sujeto de interbloqueo si otra sesión tiene la prioridad de interbloqueo establecida en NORMAL o en un valor entero igual a 0. NORMAL es la prioridad predeterminada.

  • HIGH
    Especifica que la sesión actual será el sujeto de interbloqueo si el resto de las sesiones implicadas en la cadena de interbloqueos tienen la prioridad de interbloqueo establecida en un valor entero superior a 5 o puede ser el sujeto de interbloqueo si otra sesión tiene la prioridad de interbloqueo establecida en HIGH o en un valor entero igual a 5.

  • <numeric-priority>
    Es un intervalo de valores enteros (-de 10 a 10) para proporcionar 21 niveles de prioridad de interbloqueo. Especifica que la sesión actual será el sujeto de interbloqueo si el resto de las sesiones de la cadena de interbloqueos se ejecutan con un valor de prioridad de interbloqueo superior, pero no será el sujeto de interbloqueo si el resto de las sesiones se ejecutan con un valor de prioridad de interbloqueo inferior al valor de la sesión actual. Además, especifica que la sesión actual puede ser el sujeto de interbloqueo si se ejecuta otra sesión con un valor de prioridad de interbloqueo igual al de la sesión actual. LOW se asigna a -5, NORMAL a 0 y HIGH a 5.

  • **@**deadlock_var
    Es una variable de carácter que especifica la prioridad del interbloqueo. La variable se debe establecer en el valor 'LOW', 'NORMAL' o 'HIGH'. La variable debe tener la longitud suficiente para contener la cadena completa.

  • **@**deadlock_intvar
    Es una variable de entero que especifica la prioridad del interbloqueo. La variable se debe establecer en un valor entero en el intervalo (de -10 a 10).

Comentarios

Los interbloqueos se producen cuando dos sesiones esperan a tener acceso a los recursos bloqueados por la otra sesión. Si una instancia de SQL Server detecta que dos sesiones están interbloqueadas, resuelve el interbloqueo mediante la selección de una de las sesiones como el sujeto de interbloqueo. La transacción actual del sujeto se revierte y se devuelve el mensaje de error de interbloqueo 1205 al cliente. De este modo, se desbloquea dicha sesión para que pueda continuar la otra sesión.

La selección de la sesión como sujeto de interbloqueo depende de la prioridad de interbloqueo de cada sesión:

  • Si ambas sesiones tienen la misma prioridad de interbloqueo, la instancia de SQL Server elige la sesión cuya reversión como sujeto de interbloqueo resulta menos costosa. Por ejemplo, si ambas sesiones tienen la prioridad de interbloqueo establecida en HIGH, la instancia elige como sujeto de interbloqueo la sesión cuya reversión considera menos costosa.

  • Si las sesiones tienen distintas prioridades de interbloqueo, la sesión con la prioridad de interbloqueo inferior se elige como el sujeto de interbloqueo.

SET DEADLOCK_PRIORITY se establece en tiempo de ejecución, no en tiempo de análisis.

Permisos

Debe pertenecer a la función public.

Ejemplos

En el siguiente ejemplo se utiliza una variable para establecer la prioridad de interbloqueo en LOW.

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

SET DEADLOCK_PRIORITY @deadlock_var;
GO

En el siguiente ejemplo se establece la prioridad de interbloqueo en NORMAL.

SET DEADLOCK_PRIORITY NORMAL;
GO