Síntomas
Imagine la siguiente situación:
-
Tiene una base de datos de Microsoft SQL Server 2012 que tiene habilitadas las opciones ALLOW_SNAPSHOT_ISOLATION y READ_COMMITTED_SNAPSHOT .
-
Tiene al menos tres consultas simultáneas que se ejecutan en la misma tabla.
-
Las consultas usan la sugerencia de consulta (TABLOCK, UPDLOCK) .
-
Cada consulta se incluye en una declaración de Begin Tran explícita, pero la instrucción commit Tran no se ejecuta.
Cuando se confirma la primera consulta en este escenario, una de las otras consultas se interbloqueará. Cuando READ_COMMITTED_SNAPSHOT está habilitado junto con las sugerencias de consulta TABLOCK y UPDLOCK , las sesiones toman los bloqueos IX de la tabla. El interbloqueo se produce cuando las dos sesiones simultáneas intentan convertir los bloqueos IX en bloqueos de X al mismo tiempo. Si READ_COMMITTED_SNAPSHOT está deshabilitado, las sesiones obtendrán seis bloqueos que no se interbloquean cuando se convierten en bloqueos X. La corrección resuelve este comportamiento al otorgar LCK_M_SCH_S bloqueos en lugar de bloqueos IX cuando READ_COMMITTED_SNAPSHOT se utiliza con sugerencias TABLOCK y UPDLOCK .Nota: Este problema también se produce en Microsoft SQL Server 2008 R2. Pronto se publicará una revisión para SQL Server 2008 R2.
Resolución
El problema se solucionó por primera vez en la siguiente actualización acumulativa de SQL Server.
Actualización acumulativa 8 para SQL Server 2012 SP1 /en-us/help/2917531
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".