Síntomas
Imagine la siguiente situación:
-
Tiene una base de datos que tiene las opciones ALLOW_SNAPSHOT_ISOLATION y READ_COMMITTED_SNAPSHOT habilitada en Microsoft SQL Server 2008 R2.
-
Ejecuta una instrucción Select que contiene las sugerencias TABLOCK y UPDLOCK en una tabla de la base de datos.
-
La instrucción Select se ajusta en una instrucción Begin Tranexplícita, pero no se ejecuta commit Tran .
-
Dos de las mismas consultas que se inician con las mismas sugerencias de consulta están en la transacción explícita.
En este escenario, cuando se confirma la primera consulta, una de las otras consultas será un interbloqueo.
Causa
El problema se produce porque SQL Server informa incorrectamente de interbloqueos en uno de los escenarios siguientes:
-
Cuando se habilitan ALLOW_SNAPSHOT_ISOLATION y READ_COMMITTED_SNAPSHOT para una base de datos, es posible que se notifiquen incorrectamente varias consultas en la misma transacción como interbloqueadas cuando se complete una de ellas.
-
Cuando se habilita ALLOW_SNAPSHOT_ISOTION y se usan las sugerencias TABLOCK y UPDLOCK , la segunda y tercera instrucción Select toman bloqueos IX con la intención de convertir a X. Los bloqueos IX terminan el interbloqueo cuando se realiza un intento de conversión a X.
-
Cuando ALLOW_SNAPSHOT_ISOLATION está deshabilitado, la segunda y tercera consulta obtendrán un bloqueo de seis. En este caso, cuando el bloqueo de seis se convierte a X, solo se trata de un escenario de bloqueo, no un bloqueo.
Resolución
El problema se solucionó por primera vez en la siguiente actualización acumulativa de SQL Server. Después de aplicar la revisión, SQL Server resuelve el problema grabando si se encuentra una sugerencia de confirmación de lectura o una sugerencia NOLOCK para la base de datos y la consulta. Esta información se usa para seleccionar el tipo correcto de bloqueos para controlar la situación correctamente, en lugar de incorrectamente el bloqueo de interbloqueos.
Actualización acumulativa 11 para SQL Server 2008 R2 SP2 /en-us/help/2926028
Cada actualización acumulativa para SQL Server contiene todas las revisiones y todas las revisiones de seguridad incluidas en la actualización acumulativa anterior. Consulte las últimas actualizaciones acumulativas para SQL Server:
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft recogidos en la sección "Se aplica a".