We couldn’t sign you in
Select the account you want to use.

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

    • 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.

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:

http://support.microsoft.com/contactus/?ws=supportNota: El formulario de "Descarga de revisión 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 = 1
WHILE @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
END
SELECT * 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:

Diagnosticar y resolver la contención de bloqueo por bucle en SQL ServerNota: 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:

Información acerca de los indicadores de traza en SQL Server 2012
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


¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Insider

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a tu experiencia?

¡Gracias por sus comentarios!

×