REVISIÓN: Se producen problemas de rendimiento cuando aumenta la actividad de bloqueo de base de datos en SQL Server

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): 2926217
Aviso
De forma predeterminada, Service Pack 1 para SQL Server 2014 y Service Pack 3 para SQL Server 2012 incluye esta revisión y no es necesario agregar los indicadores de traza para habilitar la corrección. Para habilitar la corrección después de instalar una de las actualizaciones acumulativas de la sección resolución, tendrá que iniciar Microsoft SQL Server agregando el indicador de traza 1236 a parámetros de inicio.
Síntomas
Suponga que ejecuta una instancia de Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 o SQL Server 2008 R2 en un equipo que contiene muchos procesadores. Cuando el número de bloqueos (tipo de recurso = base de datos) de una base de datos supere un determinado umbral, experimenta los siguientes problemas de rendimiento:
  • Se producen valores elevados de recuento de bloqueo por bucle LOCK_HASH .

    Nota: Consulte la sección "Más información" para obtener información acerca de cómo supervisar este spinlock.
  • Operaciones que requieren bloqueos de base de datos o consultas tardan mucho tiempo en completarse. Por ejemplo, puede que observe los retrasos de rendimiento siguiente:
    • Inicios de sesión de SQL Server
    • Consultas de servidor vinculadas
    • sp_reset_connection para aceptar
    • Transacciones
Nota: Para encontrar la lista de bloqueos (tipo de recurso = base de datos) en una base de datos determinado, consulte la sección "Más información". El valor de umbral varía según el entorno.
Solución

Información de actualización acumulativa

El problema se solucionó primero en la siguiente actualización acumulativa de SQL Server.

Actualización acumulativa 13 para SQL Server 2008 R2 SP2

17 de actualización acumulativa para el Service Pack 3 de SQL Server 2008

Actualización acumulativa 1 de SQL Server de 2014

9 de actualización acumulativa para el Service Pack 1 de SQL Server 2012

Acerca de las actualizaciones acumulativas de SQL Server

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

Información de la revisión

Existe un hotfix disponible desde Microsoft. Sin embargo, esta revisión se diseñó para corregir únicamente el problema que se describe en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico.

Si la revisión está disponible para su descarga, entonces podrá ver una sección de "Descarga de revisión disponible" en la parte superior de este artículo de Knowledge Base. Si esta sección no aparece, envíe una solicitud al servicio de atención al cliente y soporte técnico para obtener la revisión.

Nota: Si se producen problemas adicionales o cualquier solución de problemas es necesario, tendrá que crear una solicitud de servicio independiente. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con esta revisión en cuestión. Para obtener una lista completa de los números de teléfono de servicio al cliente de Microsoft o para crear una solicitud de servicio independiente, visite el siguiente sitio Web de Microsoft: Nota: El formulario "Hotfix descargar disponible" muestra los idiomas para los que la revisión está disponible. Si no ve su idioma, es porque no hay una revisión para ese idioma.

Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".
Más información
Cuando una aplicación realiza una conexión a SQL Server, primero se establece un contexto de base de datos. De forma predeterminada, la conexión intenta obtener un bloqueo de base de datos en modo SH. El bloqueo SH-base de datos se liberará cuando la conexión se detiene o se cambia el contexto de la base de datos durante la duración de la conexión. Si tiene muchas conexiones activas que utilizan el mismo contexto de base de datos, puede tener muchos bloqueos del tipo de recurso de base de datos de esa base de datos específica.

En el equipo que tenga 16 o más CPUs, objetos de la tabla sólo utilizan un esquema de bloqueo con particiones. Sin embargo, no se dividen los bloqueos de base de datos. Por lo tanto, cuanto mayor sea el número de la base de datos bloquea, más tiempo tardará SQL Server obtener un bloqueo en la base de datos. La mayoría de aplicaciones no experimentan los problemas causados por este diseño. Pero, tan pronto como el número supera un determinado umbral, tiempo y trabajo adicional se requiere para obtener el bloqueo. Aunque el costo es sólo microempresas segundos para cada bloqueo adicional, el tiempo total puede aumentar rápidamente porque los depósitos de hash de bloqueo están protegidos mediante el uso de un bloqueo por subproceso. Esto hace que los ciclos de CPU adicionales y se espera para que los trabajadores adicionales obtener el bloqueo.

Este hotfix presenta la partición del bloqueo de la base de datos cuando está habilitado el indicador de traza T1236 al inicio. El bloqueo de la base de datos de la partición mantiene la profundidad de la lista de bloqueo manejables en cada partición local. Esto optimiza considerablemente la ruta de acceso que se utiliza para obtener un bloqueo de base de datos .

Para supervisar los bloqueos por bucle LOCK_HASH , puede utilizar la consulta siguiente.
SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)DECLARE @counter int = 1WHILE @counter < 100      BEGIN            INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'            WAITFOR DELAY '00:00:05'            SET @counter +=1      ENDSELECT * FROM #spinlock_stats ORDER BY [CaptureTime]DROP TABLE #spinlock_stats
Para obtener más información sobre cómo diagnosticar y resolver la contención de bloqueo por bucle en SQL Server, consulte el siguiente documento:

Nota: Aunque este documento está escrito para SQL Server 2008 R2, la información es todavía aplicable a SQL Server 2012.
Referencias
Para obtener más información acerca de los indicadores de traza en SQL Server 2012, visite el siguiente sitio Web de TechNet:


Para obtener más información acerca de cómo encontrar el número de bloqueos de la base de datos de usuario para cada base de datos, utilice la siguiente consulta para calcular este valor:
select  Resource_database_id, resource_type, request_mode, request_status,  count (*) 'LockCount' from sys.dm_tran_locks group by  Resource_database_id, resource_type, request_mode, request_status


Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 2926217 - Última revisión: 12/03/2015 06:00:00 - Revisión: 9.0

Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2008 Service Pack 3, Microsoft SQL Server 2008 R2 Service Pack 2

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbautohotfix kbhotfixserver kbmt KB2926217 KbMtes
Comentarios