Síntomas
Tras instalar SQL Server 2014 Service Pack 1 (SP1), SQL Server 2012 SP3 o SQL Server 2016, experimenta un rendimiento lento de las consultas y un uso elevado de la CPU en modo con privilegios (kernel) hasta que se reinicia el servidor. También es posible que vea un alto volumen de esperas de PAGELATCH_*.
Resolución
Se ha corregido el problema en las siguientes actualizaciones acumulativas de SQL Server:
- Actualización acumulativa 2 para SQL Server 2016
- Actualización acumulativa 5 para SQL Server 2012 Service Pack 3 (SP3)
- Actualización acumulativa 7 para SQL Server 2014 SP1
Recomendación: instalar la actualización acumulativa más reciente 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. Se recomienda descargar e instalar las actualizaciones acumulativas más recientes para SQL Server:
- Actualización acumulativa más reciente para SQL Server 2016
- Actualización acumulativa más reciente para SQL Server 2012 SP3
- Actualización acumulativa más reciente para SQL Server 2014 SP1
Causa
SQL Server utiliza la promoción dinámica de latch y la lógica de degradación (super/sub-latch). Esto mejora el rendimiento y la escalabilidad de SQL Server al realizar un seguimiento del número de adquisiciones en un bloqueo temporal y del tiempo que debería llevar adquirir el mismo bloqueo temporal si no existía ninguna contención de bloqueo temporal. A continuación, se promueven los cierres elegibles (superbloqueo) en función de este modelo. Cuando hay muchos cambios (inserciones, actualizaciones o eliminaciones) en un montón o BTree (HoBT), los bloqueos temporales asociados a HoBT se pueden promover al estado de superbloqueo. Sin embargo, la degradación no se produce automáticamente. Puede leer más sobre el super/subenganche en este artículo.
Si estos HoBT se desasignan posteriormente, el HoBT liberado vuelve a un caché global para su reutilización. Cuando se reutiliza ese HOBT, reutiliza el pestillo promocionado anteriormente, incluso cuando no hay contención en el HoBT. Esto agrega sobrecarga de CPU. Este comportamiento aumenta el uso de CPU en modo de privilegios (kernel) de SQL Server hasta que se reinicie el servidor. Este aumento normalmente no agrega más de varios microsegundos con cada ejecución. También puede ver un alto volumen de esperas de PAGELATCH_* debido a estos superbloqueos extendidos en los HoBT.
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".