KB3011807 - CORRECCIÓN: Se produce una gran cadena de bloqueo cuando se utiliza la replicación de mezcla en SQL Server 2012 o en SQL Server 2014

Se aplica a
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

Síntomas

Supongamos que usa la replicación de mezcla en Microsoft SQL Server 2012 o en Microsoft SQL Server 2014. Como parte del proceso de sincronización, el agente de fusión crea una nueva generación en una sesión. Si por alguna razón, como un interbloqueo o un tiempo de espera, la transacción que realiza la generación se selecciona como víctima de interbloqueo y la transacción se revierte, puede haber una gran cadena de bloqueo para MSinternal_makegeneration_inprog bloqueo de aplicación en la próxima generación, y la sesión mencionada anteriormente se muestra como el bloqueador de encabezado.

Causa

El bloqueo de aplicación que se usa para ayudar a proteger un proceso de generación es un bloqueo de aplicación de nivel de sesión. Cuando se detecta un interbloqueo durante el proceso de generación cero, solo se revierte la transacción, pero la sesión no se cierra. Para liberar un bloqueo de aplicación de nivel de sesión, la sesión debe cerrarse. Por lo tanto, debido al diseño de la lógica de reintento (la sesión no se cerrará durante la generación del error en la replicación de mezcla), si se produce un error en el interbloqueo de la primera generación, el bloqueo de sesión (MSinternal_makegeneration_inprog) obtenido no se liberará durante la reversión de la transacción. Esto provoca el bloqueo de la cadena de solicitudes de bloqueo en el proceso de creación de la próxima generación. Se muestra que el bloqueador de encabezado es la primera generación que realiza una solicitud que produce un error en el interbloqueo.
Antes de la revisión, SQL Server solo borra el bloqueo para un proceso de generación exitoso. Deja un bloqueo de aplicación de sesión huérfano antes del cierre de sesión si se produce un interbloqueo.

Resolución

Este problema se corrigió por primera vez en la siguiente actualización acumulativa de SQL Server.

Actualización acumulativa 38 para SQL Server 2014 /en-us/help/3011055

Actualización acumulativa 3 para SQL Server 2012 SP2 /en-us/help/3002049

Acerca de las actualizaciones acumulativas para SQL Server

Cada nueva actualización acumulativa para SQL Server contiene todas las revisiones y correcciones de seguridad que se incluyeron con la actualización acumulativa anterior. Consulte las actualizaciones acumulativas más recientes para SQL Server:

      

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".