Actualizar estadísticas con exploración completa en SQL Server 2014 utiliza 100% de CPU, en 2008 R2, 15%


10

¿Por qué las estadísticas de actualización de exploración completa usan el 100% de la CPU en SQL Server 2014 cuando usa quizás el 20% de la CPU en SQL Server 2008 R2, para las mismas tablas, con una capacidad de hardware similar?

He estado buscando MAXDOPotras opciones y realmente no veo nada que destaque. Me doy cuenta de que podría haber configuraciones que podrían causar esto, pero las configuraciones son muy similares para ambas bases de datos (por ejemplo, MAXDOPes 4 para ambas, y ambas tienen múltiples núcleos). Ambos son Enterprise Edition.

¿Hay algo "diferente" en SQL Server 2014 versus SQL Server 2008 R2 que pueda explicar esto? Tengo la opción de memoria al 90% para ambos servidores. ¿Alguna idea sobre qué buscar?

Ejecuto estadísticas de actualización con escaneo completo (100%) una vez por semana en dos servidores que usan SQL Server 2008 R2 / SP3 y SQL Server 2014 / SP2, y las bases de datos tienen la misma estructura. En el servidor 2008 R2, las estadísticas de actualización de dos tablas muy grandes tardan varias horas, que es lo que espero, pero la CPU permanece por debajo del 20% más o menos todo el tiempo. Sin embargo, en el servidor de 2014, la CPU alcanza el 100% durante aproximadamente 40 minutos. Las tablas son un poco más pequeñas en el servidor 2014. Veo esto usando los menús de análisis del Monitor SQL.

Aquí está la salida del archivo de registro de Ola en el SQL Server 2014, la CPU pasa al 100% de aproximadamente 2:10 a 2:45:

Date and time: 2017-06-24 02:10:20  
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000005_15502E78] WITH FULLSCAN  
Outcome: Succeeded  
Duration: 00:07:48  
Date and time: 2017-06-24 02:18:08  
Date and time: 2017-06-24 02:18:08  
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000006_15502E78] WITH FULLSCAN  
Outcome: Succeeded  
Duration: 00:32:22  
Date and time: 2017-06-24 02:50:30  

Aquí está la salida del archivo de registro de Ola en el SQL Server 2008 R2 para las dos estadísticas anteriores, pero la CPU alcanza quizás el 15%:

Date and time: 2017-06-24 03:30:32  
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000003_0425A276] WITH FULLSCAN  
Outcome: Succeeded  
Duration: 00:05:00  
Date and time: 2017-06-24 03:35:32  
Date and time: 2017-06-24 03:35:32  
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000004_0425A276] WITH FULLSCAN  
Outcome: Succeeded  
Duration: 00:52:31  
Date and time: 2017-06-24 04:28:03

No puedo ejecutarlos con el servidor maxdop = 1 ya que eso elimina toda la generación de planes paralelos, y eso podría dañar la aplicación. Planeo ir en la dirección opuesta y aumentarlo a 8 (hay 16 núcleos en la caja) y ver qué pasa. Puede ir más rápido para reducir el tiempo de vinculación de la CPU. Este trabajo se ejecuta mientras los usuarios ya no están.


¿Verificó si el proceso está vinculado a IO en el servidor 2008 R2? ¿La tempdbconfiguración es la misma? Se puede usar mientras se UPDATE STATISTICSestá ejecutando, por lo que también podría ser un problema.
MicSim

1
Yo también sospecharía que el paralelismo es probablemente el culpable. ¿Ha verificado el umbral de costo para paralelismo por casualidad? Además, puede ser una buena idea obtener la lista completa sp_configure de ambos cuadros y diferenciarlos para ver qué más es diferente.
DBADon el

Respuestas:


1

Las actualizaciones de estadísticas pueden ir paralelas en función de muchas opciones diferentes en SQL Server:

  • Umbral de costo para paralelismo : una consulta debe ser tan alta para viajar en el tren de paralelismo. Sus dos servidores podrían tener configuraciones CTFP diferentes que causen que la actualización 2008R2 se ejecute con un solo subproceso, mientras que el 2014 puede tener varios subprocesos.
  • Grado máximo de paralelismo : dicta cuántos núcleos puede utilizar una consulta, como máximo, si SQL Server decide paralelizarla hasta ese punto. El cuadro 2008R2 podría tener MAXDOP establecido en 1, mientras que el cuadro 2014 podría tener el valor predeterminado de 0 (ilimitado).
  • Regulador de recursos : esta característica de Enterprise Edition le permite limitar diferentes grupos de usuarios o aplicaciones a diferentes MAXDOP.

En versiones posteriores de SQL Server (2016 y posteriores), esto se vuelve aún más complicado:

  • Opciones de ámbito de nivel de base de datos : puede hacer clic con el botón derecho en una base de datos, ir a propiedades y establecer el nivel MAXDOP para esa base de datos.
  • Sugerencias de paralelismo estadístico : a partir de 2016 SP2, las declaraciones de creación y actualización de estadísticas aceptan sugerencias MAXDOP

Como notó, su 2008R2 se va con un solo subproceso, mientras que el 2014 se está volviendo con varios subprocesos (terminando así más rápido, pero maximizando la CPU mientras se ejecuta).

Para encontrar el equilibrio adecuado para sus trabajos de estadísticas, piense en:

  • ¿Qué otras cargas de trabajo están sucediendo en la base de datos al mismo tiempo? ¿Puedes permitirte dominar la caja durante breves períodos? Por ejemplo, en los almacenes de datos que permanecen inactivos durante la mayoría de las horas de fin de semana, he visto a personas criticar las actualizaciones de estadísticas con escaneos completos cuando saben que nadie está usando el servidor de todos modos. En entornos transaccionales de servicio pesado, debe comenzar a utilizar menos impacto para las tareas de mantenimiento si los usuarios se quejan incluso durante los períodos de medianoche.
  • ¿Fullscan es realmente necesario? ¿Ves consultas que solo obtienen buenos planes cuando usas la opción fullscan, o simplemente lo haces como una práctica recomendada? A medida que su base de datos crece, si sus inversiones en hardware no se mantienen a la par, es posible que deba comenzar a hacer concesiones en el muestreo de estadísticas en lugar de realizar escaneos completos.
  • ¿Puedes actualizar las estadísticas con menos frecuencia? Por ejemplo, actualice 1/4 de sus estadísticas cada fin de semana, y luego cada mes, ¿todo recibirá actualizaciones de estadísticas?
  • ¿Puedes actualizar menos objetos? A menudo veo personas que actualizan las estadísticas incluso en grandes auditorías o tablas de archivo simplemente porque se hicieron algunas docenas de nuevas inserciones, pero esas inserciones realmente no afectan las estadísticas en la tabla (y nadie lo consulta de todos modos).

0

Respuesta wiki comunitaria :

La mejor suposición: el plan elegido para actualizar las estadísticas es paralelo o más paralelo en el cuadro 2014 que en el cuadro 2008 R2.

Las estadísticas de actualización paralelas fullscanhan existido desde 2005, y para las estadísticas muestreadas a partir de 2016, vea Adiciones del optimizador de consultas en SQL Server 2016 por Gjorgji Gjeorgjievski en el Blog del motor de base de datos de SQL Server.

Si tiene Enterprise Edition, puede usar el regulador de recursos para limitar la CPU que utiliza su trabajo de mantenimiento.

Considere también votar por el parámetro AgregarMAXDOP sugerencia de conexión a Actualizar estadísticas de Javier Villegas.

Preguntas y respuestas relacionadas: Actualización de estadísticas paralelas

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.