none
Ayuda uso CPU RRS feed

  • Pregunta

  • Estimados.

    Tengo un SS2012, que en algunas ocasiones la CPU sube de manera excesiva manteniendose por 15 min entre 95% - 100%

    Me pueden dar una ayuda para ver porque mi servidor esta consumiendo tanta CPU y según yo a simple vista las consultas que se ejecutan son pocas y no deberian afectar mayormente a la CPU ?

    Ejemplo, reviso las consultas que mas ocupan CPU y por ejemplo me da algunas que al ejecutarlas me retorna datos bastante rapido y su plan es este y no veo que mejoras puedo hacer.

    SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
    ((CASE qs.statement_end_offset
    WHEN -1 THEN DATALENGTH(qt.TEXT)
    ELSE qs.statement_end_offset
    END - qs.statement_start_offset)/2)+1),
    qs.execution_count,
    qs.total_logical_reads, qs.last_logical_reads,
    qs.total_logical_writes, qs.last_logical_writes,
    qs.total_worker_time,
    qs.last_worker_time,
    qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
    qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
    qs.last_execution_time,
    qp.query_plan
    FROM sys.dm_exec_query_stats qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
    CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
     ORDER BY qs.total_worker_time DESC -- CPU time


    Saludos.


    DBA SQL Server Santiago/Chile

    miércoles, 13 de diciembre de 2017 15:07

Respuestas

  • Hola.

    No hay como decir que ese plan está correcto o no, y si éste se reutiliza o no con lo que compartes.

    Una de las causas para tu situación puede ser que no se estén reutilizando los planes de ejecución y el Query Optimizer se la pasa recompilando planes de ejecución para la misma consulta en donde solo cambia la condición del WHERE, por mencionar uno de los escenarios que mas he visto.

    Te presente que SQL Server recompilará el plan de ejecución generado para SELECT campo1, campo2, campo3 WHERE campo4='ALFA', cuando llegue el query SELECT campo1, campo2, campo3 WHERE campo4='BETA'. Una manera de evitar esto es usar un parámetro en el WHERE y así el Query Optimizer usará el plan que tiene en el cache "SELECT campo1, campo2, campo3 WHERE campo4=@parametro".

    Igual, revisa este artículo: SQL High CPU troubleshooting checklist, para hacer una mejor revisión y entender bien que pasa en tu plataforma.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    • Propuesto como respuesta MarianokMVP jueves, 21 de diciembre de 2017 14:22
    • Marcado como respuesta Pablo RubioModerator martes, 26 de diciembre de 2017 15:36
    jueves, 21 de diciembre de 2017 12:48
  • Hola CMAPM

    De acuerdo a tu consulta, te recomiendo ir al siguiente enlace que te voy a compartir, en el cual explica la causa del porque tu CPU tiene alto uso con SQL que pueda serte de mucha utilidad.

    https://technet.microsoft.com/es-es/library/2007.10.sqlcpu.aspx

    Quedamos al pendiente de cualquier actualización de tu parte.

    Saludos Cordiales.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 13 de diciembre de 2017 17:44
    Moderador

Todas las respuestas

  • Hola CMAPM

    De acuerdo a tu consulta, te recomiendo ir al siguiente enlace que te voy a compartir, en el cual explica la causa del porque tu CPU tiene alto uso con SQL que pueda serte de mucha utilidad.

    https://technet.microsoft.com/es-es/library/2007.10.sqlcpu.aspx

    Quedamos al pendiente de cualquier actualización de tu parte.

    Saludos Cordiales.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 13 de diciembre de 2017 17:44
    Moderador
  • Hola.

    No hay como decir que ese plan está correcto o no, y si éste se reutiliza o no con lo que compartes.

    Una de las causas para tu situación puede ser que no se estén reutilizando los planes de ejecución y el Query Optimizer se la pasa recompilando planes de ejecución para la misma consulta en donde solo cambia la condición del WHERE, por mencionar uno de los escenarios que mas he visto.

    Te presente que SQL Server recompilará el plan de ejecución generado para SELECT campo1, campo2, campo3 WHERE campo4='ALFA', cuando llegue el query SELECT campo1, campo2, campo3 WHERE campo4='BETA'. Una manera de evitar esto es usar un parámetro en el WHERE y así el Query Optimizer usará el plan que tiene en el cache "SELECT campo1, campo2, campo3 WHERE campo4=@parametro".

    Igual, revisa este artículo: SQL High CPU troubleshooting checklist, para hacer una mejor revisión y entender bien que pasa en tu plataforma.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    • Propuesto como respuesta MarianokMVP jueves, 21 de diciembre de 2017 14:22
    • Marcado como respuesta Pablo RubioModerator martes, 26 de diciembre de 2017 15:36
    jueves, 21 de diciembre de 2017 12:48
  • Interesante articulo Guillermo, gracias por compartirlo.
    viernes, 22 de diciembre de 2017 1:18