REVISIÓN: Un rendimiento lento o interbloqueo cuando restaura una base de datos y ejecutar instrucciones al mismo tiempo en SQL Server 2012

Seleccione idioma Seleccione idioma
Id. de artículo: 2725950 - Ver los productos a los que se aplica este artículo
Microsoft distribuye las correcciones de Microsoft SQL Server 2012 como un archivo descargable. Debido a que las revisiones son acumulativas, cada versión nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2012.
Expandir todo | Contraer todo

En esta página

Síntomas

Escenario 1

Tenga en cuenta la situación siguiente:
  • Restaurar una base de datos en Microsoft SQL Server 2012.
  • Antes de que termine la operación de restauración de base de datos, otro proceso hace referencia a la vista de catálogo de sys.database_recovery_status y requiere un bloqueo en la misma base de datos. Por ejemplo, ejecute la siguiente instrucción SELECT :

    SELECT * FROM sys.database_recovery_status
En este escenario, un rendimiento lento se produce en el que un proceso para la instrucción SELECT espera hasta que finalice el proceso de restauración de base de datos.

Escenario 2

Tenga en cuenta la situación siguiente:
  • Restaurar una base de datos en SQL Server 2012.
  • Antes de que termine la operación de restauración de base de datos, ejecute la instrucción siguiente:

    IF EXISTS (SELECT * FROM sys.database_recovery_status WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
    Nota El DataBaseID representa el identificador de la base de datos en el que realice la operación de restauración de base de datos.
En este escenario, se produce un interbloqueo en el proceso de restauración de base de datos. Este bloqueo hace que el proceso de restauración de base de datos producirá un error.

Causa

Los dos escenarios que se describen en la sección "Síntomas" son causados por las causas de la mismas.

En la sección "Scenario1", el problema se produce debido a que el proceso de restauración de base de datos requiere un bloqueo exclusivo sobre la base de datos. Cuando se ejecuta la instrucción que se menciona en dicha sección, se requiere un bloqueo compartido en la misma base de datos. Espera a por lo tanto, el bloqueo compartido que el bloqueo exclusivo hasta que se libere el bloqueo exclusivo.

En la sección "Situación 2", cuando se ejecuta la instrucción que se menciona en dicha sección, un bloqueo compartido falta en la misma base de datos y en la tabla sys.sysdbreg . En la última fase del proceso de restauración de base de datos, el proceso requiere un bloqueo de actualización en la tabla sys.sysdbreg . Sin embargo, no se libera el bloqueo compartido de la base de datos. Por lo tanto, se produce un interbloqueo en la tabla de sys.sysdbreg y el proceso de restauración de base de datos se determina como víctima del interbloqueo.

Solución

Información sobre la actualización acumulativa

Paquete de actualización acumulativo 1 para Service Pack 1 de SQL Server 2012

La solución a este problema en primer lugar se publicó en 1 de actualización acumulativa. Para obtener más información acerca de cómo obtener este paquete de actualización acumulativa para Service Pack 1 de SQL Server 2012, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2765331 Paquete de actualización acumulativo 1 para Service Pack 1 de SQL Server 2012
Nota Como las compilaciones son acumulativas, cada nueva versión de revisión contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2012. Se recomienda que considere la posibilidad de aplicar la versión de revisión más reciente que contenga este hotfix. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2772858 La de SQL Server 2012 se basa que se publicaron después del lanzamiento de Service Pack 1 de SQL Server 2012

Paquete de actualización acumulativa 3 para SQL Server 2012

La solución a este problema en primer lugar se publicó en actualización acumulativa 3. Para obtener más información acerca de cómo obtener este paquete de actualización acumulativa para SQL Server 2012, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2723749 Actualización acumulativa 3 para SQL Server 2012
Nota Como las compilaciones son acumulativas, cada nueva versión de revisión contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2012. Se recomienda que considere la posibilidad de aplicar la versión de revisión más reciente que contenga este hotfix. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2692828 La de SQL Server 2012 se basa que se publicaron después del lanzamiento de SQL Server 2012

Estado

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

Solución

Para solucionar temporalmente el problema en el escenario 2, utilice uno de los métodos siguientes.
Método 1


Modifique la instrucción para evitar el bloqueo compartido en la tabla sys.sysdbreg mediante el uso de la sugerencia "NOLOCK".
IF EXISTS (SELECT * FROM sys.database_recovery_status with(NOLOCK) WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
Método 2
Establecer la prioridad de los mismos de la instrucción para "Baja".
SET DEADLOCK_PRIORITY LOW
IF EXISTS(SELECT * FROM sys.database_recovery_status where database_id = DataBaseID AND database_guid IS NOT NULL)
Nota Cuando utiliza el segundo método para evitar el interbloqueo en la instrucción y en el proceso de restauración de base de datos, los códigos de la instrucción IF no se ejecutará.

Referencias

Para obtener más información acerca de bloqueo exclusivo, bloqueo compartido y bloqueo de actualización, vaya al sitio Web de MSDN siguiente:
Información general sobre los modos de bloqueo
Para obtener más información del modelo de servicio Incremental para SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
935897 Un modelo de servicio Incremental está disponible en el equipo de SQL Server para entregar revisiones para problemas detectados
Para obtener más información acerca del esquema de nomenclatura para las actualizaciones de SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
822499 Esquema de nomenclatura para los paquetes de actualización de software de Microsoft SQL Server
Para obtener más información acerca de la terminología de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684 Descripción de la terminología estándar que se utiliza para describir las actualizaciones de software de Microsoft

Propiedades

Id. de artículo: 2725950 - Última revisión: martes, 20 de noviembre de 2012 - Versión: 2.0
La información de este artículo se refiere a:
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Express
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
Palabras clave: 
kbtshoot kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2725950 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 2725950

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com