KB3162589 - CORRECCIÓN: Disminución del rendimiento del SQL Server cuando hay un uso elevado de la CPU en modo privilegiado y un alto volumen de esperas de bloqueo temporal de página

Se aplica a
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Web - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Service Pack 3 SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Standard SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Express - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

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:

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:

      

        
      

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