¿Cómo soluciono los problemas de uso elevado de la CPU en mi instancia de RDS para SQL Server?

Última actualización: 04/10/2022

Estoy experimentando un uso elevado de la CPU en mi instancia de base de datos de Amazon Relational Database Service (Amazon RDS) para las instancias de Microsoft SQL Server DB. ¿Cómo puedo solucionar problemas y resolver el uso elevado de la CPU?

Descripción corta

Los motivos más comunes del aumento en la utilización de la CPU son los siguientes:

  • Cargas de trabajo pesadas iniciadas por el usuario, múltiples consultas simultáneas o transacciones de larga duración
  • Usar una clase de instancia subaprovisionada para la carga de trabajo
  • Estadísticas desactualizadas y fragmentación de índices o índices faltantes
  • Consultas con posibilidades de mejora
  • Bloqueos e interbloqueos
  • Paralelismo
  • Compilación y recompilación frecuentes
  • Detección de parámetros
  • Agotamiento del hilo

Para identificar el origen del uso de la CPU en su instancia de Amazon RDS para SQL Server, utilice las siguientes herramientas:

  • Métricas de Amazon CloudWatch para Amazon RDS
  • Supervisión mejorada
  • Información sobre rendimiento
  • Herramientas nativas de SQL Server

Después de identificar la fuente, puede analizar y optimizar su carga de trabajo para reducir el uso de la CPU.

Resolución

Métricas de Amazon CloudWatch para Amazon RDS

Puede usar las métricas de CloudWatch para identificar los patrones de CPU durante períodos prolongados. Compare los gráficos de WriteIOPs, ReadIOPs, ReadThroughput, y WriteThroughput, junto con la utilización de la CPU para encontrar los momentos en los que la carga de trabajo causó una alta CPU. Para obtener más información, consulte las métricas de Amazon CloudWatch para Amazon RDS.

Si usas una instancia de la clase de instancia t2 o t3, comprueba si está sub-aprovisionada. Si observas una disminución constante en el saldo de créditos de la CPU y un aumento constante del uso de los créditos de la CPU, los núcleos de la CPU no son suficientes para tu carga de trabajo.

Tras identificar el marco temporal, puede revisar los datos de supervisión mejorada asociados a su instancia de base de datos. Puede configurar la supervisión mejorada para recopilar datos a intervalos de 1, 5, 10, 15, 30 o 60 segundos. Esto le permite recopilar datos a un nivel más granular que CloudWatch.

Supervisión mejorada

Si ha configurado Enhanced Monitoring (Supervisión mejorada), puede usarla para supervisar el sistema operativo que se ejecuta en la instancia de base de datos. Para comprobar el uso de la CPU mediante la supervisión mejorada, haga lo siguiente:

  1. En la consola de RDS, seleccione Databases (Bases de datos) y elija su base de datos.
  2. En la pestaña Monitoring (Supervisión), seleccione OS process list (Lista de procesos del sistema operativo) en el menú desplegable Monitoring (Supervisión). Compruebe si el uso elevado de la CPU está impulsado por el SO, un proceso de RDS, un proceso de SQL Server o un proceso de SQL Agent. También puede comprobar el porcentaje de CPU y el porcentaje de memoria que utilizan estos procesos.
  3. Seleccione las métricas de la lista desplegable de Enhanced monitoring (Supervisión mejorada) para comprobar los datos del monitor de rendimiento. Estas métricas incluyen CPU inactiva, Kernel y usuario. Estas métricas indican si la CPU pasa la mayor parte del tiempo inactiva, ejecutando el kernel o los procesos de usuario.
  4. Para ver otras métricas, seleccione Manage Graphs (Gestionar gráficos). Puede seleccionar las métricas relacionadas con la E/S y el rendimiento del disco. Estas métricas incluyen Lectura/s, Escritura/s, Lectura KB/s y Escritura KB/s. También puede ver los parámetros relacionados con la memoria, como la memoria disponible, la memoria de SQL Server y la memoria total. Estas métricas son útiles porque si tu CPU pasa mucho tiempo esperando recursos, es posible que veas un uso elevado de la CPU.

Para obtener más información, consulte Visualización de métricas del SO en la consola de RDS.

    Información sobre rendimiento

    Puede utilizar la Información de rendimiento de Amazon RDS para identificar las consultas responsables de la carga de la base de datos. Para ello:

    1. Marque la pestaña SQL que corresponde al período de tiempo que desea analizar.
    2. Identifique la consulta que tarda más tiempo.
    3. Compruebe la consulta que consume muchos recursos y los eventos de espera observados durante este período. Los eventos de espera que suelen asociarse con un uso elevado de la CPU son:
      SOS_SCHEDULER_YIELD: esta espera indica que un trabajador cedió el paso para que otro lo ejecutara. Los recuentos de espera altos con tiempos de espera bajos suelen indicar consultas vinculadas a la CPU. Los altos tiempos de espera aquí pueden deberse a problemas con el rendimiento. Si ve un tiempo de espera prolongado aquí, debe revisar más a fondo la carga de trabajo.
      Si SOS_SCHEDULER_YIELD es el tipo de espera predominante, podría indicar que el problema es la presión de la CPU. Revise el tipo de carga de trabajo y realice ajustes adicionales.
      CXPACKET y CXCONSUMER: Los eventos de espera relacionados con el paralelismo no suelen ser motivo de preocupación. Sin embargo, si los eventos de espera son frecuentes y afectan al rendimiento, revise las consultas y establezca los valores adecuados para el umbral de costo del paralelismo. Asegúrese de que SQL Server esté eligiendo el parámetro de paralelismo de menor coste en el grupo de parámetros.
      También puede aumentar el MAXDOP (grado máx. de paralelismo) a 1 en el nivel de consulta o instancia según su caso de uso.
      ThreadPool: este evento de espera indica que se ha agotado el hilo. Si su clase de instancia es capaz de gestionarlo, aumente el parámetro máximo de subprocesos de trabajo. Las esperas de ThreadPool pueden producirse debido al uso excesivo de subprocesos. Los subprocesos excesivos surgen debido a bloqueos, cargas de trabajo elevadas o a una gran cantidad de consultas en paralelo. O bien, esta espera podría deberse a una configuración incorrecta del parámetro máx. de hilos de trabajo.
    4. Consulte las Database Metrics (Métricas de las bases de datos) para ver las solicitudes por lotes, las compilaciones SQL y las recompilaciones de SQL. Compruebe si las consultas se están compilando muchas veces, lo que indica que son consultas improvisadas. Compruebe también si las consultas se vuelven a compilar con frecuencia para un lote determinado, indicando el uso de con recompilación en el código de consulta. Ambos factores provocan un uso elevado de la CPU.

    Herramientas nativas de SQL Server

    Consultas específicas para solucionar problemas de CPU: para obtener más información, consulte Solucionar problemas de uso elevado de la CPU en SQL Server en el sitio web de documentación de Microsoft. Céntrese en las consultas intensivas de la CPU, las estadísticas de actualización, los índices faltantes y la detección de parámetros.

    Compruebe el plan de ejecución para ver si las consultas funcionan mal y realice ajustes adicionales. Para obtener más información, consulte Mostrar un plan de ejecución real en el sitio web de documentación de Microsoft.

    Solucione problemas excesivos relacionados con el bloqueo, el interbloqueo y los bloqueos mediante consultas y eventos ampliados. Para obtener más información, consulte Comprender y resolver los problemas de bloqueo de SQL Server en el sitio web de documentación de Microsoft.

    Nota: no puede usar el método normal para guardar archivos XEL al configurar eventos ampliados en RDS para SQL Server. Para obtener instrucciones sobre cómo configurar eventos ampliados, consulte Configurar eventos ampliados en Amazon RDS para SQL Server.

    Utilice los informes de SQL Server para obtener los informes de rendimiento disponibles de forma nativa en SQL Server. Utilice estos informes para ajustar su carga de trabajo. Para obtener más información, consulte el Panel de rendimiento en el sitio web de documentación de Microsoft.


    ¿Le resultó útil este artículo?


    ¿Necesita asistencia técnica o con la facturación?