Saltar al contenido

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

8 minutos de lectura
0

Estoy experimentando un elevado uso de la CPU en mis instancias de base de datos de Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server.

Descripción corta

Los siguientes motivos pueden provocar un aumento en la utilización de la CPU:

  • Cargas de trabajo intensas iniciadas por el usuario, múltiples consultas simultáneas o transacciones de ejecución prolongada
  • Uso de una clase de instancia subaprovisionada para la carga de trabajo
  • Estadísticas desactualizadas y fragmentación de índices o índices que faltan
  • Consultas con margen de mejora
  • Bloqueos e interbloqueos
  • Paralelismo
  • Compilación y recompilación frecuentes
  • Detección de parámetros
  • Agotamiento del subproceso

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

Tras identificar el origen, puedes analizar y optimizar la carga de trabajo para reducir el uso de la CPU.

Resolución

Métricas de CloudWatch para Amazon RDS

Usa las métricas de CloudWatch para Amazon RDS para identificar los patrones de la CPU durante periodos prolongados.

Para averiguar los momentos en los que la carga de trabajo aumenta la utilización de la CPU, sigue estos pasos:

  1. Abre la consola de Amazon RDS.
  2. En el panel de navegación, elige Bases de datos y, a continuación, selecciona la instancia de base de datos que deseas supervisar.
  3. Selecciona la pestaña Supervisión.
  4. Selecciona el menú Supervisión y, a continuación, elige CloudWatch.
  5. Busca las siguientes métricas de CloudWatch y, a continuación, compara los gráficos:
    WriteIOPs
    ReadIOPs
    ReadThroughput
    WriteThroughput
    CPUUtilization
    CPUCreditBalance
    CPUCreditUsage

Nota: Si el saldo de créditos de la CPU disminuye constantemente y el uso del crédito de la CPU aumenta de manera constante, significa que no hay suficientes núcleos de CPU para la carga de trabajo. Si usas una instancia de la clase de instancia t2 o t3, comprueba si tu instancia está subaprovisionada.

Tras identificar el periodo de tiempo, utiliza la supervisión mejorada para revisar los datos asociados a tu instancia de base de datos con más detalle. Puedes configurar la supervisión mejorada para recopilar datos a intervalos de 1, 5, 10, 15, 30 o 60 segundos. 

Supervisión mejorada

Puedes configurar la supervisión mejorada para supervisar el sistema operativo (SO) que se ejecuta en la instancia de base de datos.

Para comprobar el uso de la CPU con la supervisión mejorada, sigue estos pasos:

  1. Abre la consola de Amazon RDS.
  2. En el panel de navegación, elige Bases de datos y, a continuación, selecciona la instancia de base de datos que deseas supervisar.
  3. Selecciona la pestaña Supervisión.
  4. Selecciona el menú Supervisión y, a continuación, selecciona la lista de procesos del sistema operativo.

Verifica si los procesos del sistema operativo, los procesos de RDS, los procesos de SQL Server o los procesos de un agente SQL están impulsando un uso elevado de la CPU. También puedes comprobar qué porcentaje de CPU y memoria utilizan estos procesos. 

Usa la consola para supervisar las métricas de rendimiento. En la pestaña Supervisión, selecciona el menú Supervisión y, a continuación, selecciona Administrar gráficos.

Para determinar cuándo la CPU ejecuta procesos de usuario, núcleos o está inactiva, selecciona los gráficos para las métricas de usuario de CPU, sistema de CPU y CPU inactiva. A continuación, selecciona las métricas de E/S de disco y E/S de dispositivos físicos. Estas métricas incluyen E/S de lectura, E/S de escritura, KB/s de lectura y KB/s de escritura. También puedes ver los parámetros relacionados con la memoria, como la memoria disponible, la memoria total de SQL Server y la memoria total. Estas métricas son útiles porque si la CPU pasa más tiempo esperando los recursos, es posible que se produzca un uso elevado de la CPU.

Para obtener más información, consulta Visualización de métricas OS en la consola de RDS.

Database Insights

Utiliza CloudWatch Database Insights para solucionar los problemas que más contribuyen a la carga de la base de datos y a los procesos individuales del sistema operativo que se ejecutan en un grupo de instancias.

De forma predeterminada, el modo estándar de Database Insights está habilitado para tu base de datos de Amazon RDS. Para activar el modo estándar al crear o modificar la instancia de base de datos, consulta Activación del modo estándar de Database Insights para Amazon RDS.

Nota: Si no utilizas permisos más amplios, asegúrate de conceder los permisos de IAM necesarios para Database Insights. Para obtener más información, consulta Introducción a CloudWatch Database Insights.

Para obtener más información sobre Amazon RDS y la compatibilidad con clase de instancia, consulta Compatibilidad con motores de bases de datos, regiones y clase de instancia de Amazon RDS para Database Insights.

Información de rendimiento

Activa Información de rendimiento para identificar las consultas responsables de la carga de la base de datos.

Sigue estos pasos:

  1. Accede al panel Información de rendimiento.
  2. Marca la pestaña SQL principal que se corresponde con el periodo de tiempo que deseas analizar.
  3. Identifica la consulta que está tardando más.
  4. Comprueba la consulta que consume muchos recursos y los eventos de espera observados durante este periodo. Los siguientes son los eventos de espera que se asocian con frecuencia a un uso elevado de la CPU:

SOS_SCHEDULER_YIELD muestra que un subproceso de trabajo cedió el tiempo para que otro subproceso lo ejecutara. Cuando los recuentos de espera son altos y los tiempos de espera son bajos, las consultas suelen estar vinculadas a la CPU. Cuando se producen subprocesos de trabajo, es posible que aumenten los tiempos de espera en las consultas vinculadas a la CPU. Si el tiempo de espera es largo, debes revisar la carga de trabajo. Si prevalece SOS_SCHEDULER_YIELD, el problema es la presión de la CPU. Revisa el tipo de carga de trabajo y realiza ajustes adicionales.

CXPACKET y CXCONSUMER son eventos de espera relacionados con el paralelismo que no suelen ser motivo de preocupación. Sin embargo, si los eventos de espera son frecuentes y afectan al rendimiento, revisa las consultas y establece los valores adecuados para el umbral de coste del paralelismo. Asegúrate de que SQL Server elija el parámetro de paralelismo de menor coste en el grupo de parámetros. También puedes aumentar el grado máximo de paralelismo, MAXDOP, a 1 en el nivel de consulta o instancia.

ThreadPool muestra el agotamiento del subproceso. Si tu clase de instancia puede gestionarlo, aumenta el parámetro máximo de subprocesos de trabajo. Es posible que ThreadPool espere cuando se utilizan demasiados subprocesos debido a un bloqueo, una gran carga de trabajo o un gran número de consultas paralelas. Además, si configuras mal el parámetro máximo de subprocesos de trabajo, es posible que se produzca el evento de espera ThreadPool.

Comprueba las métricas de la base de datos para ver las solicitudes por lotes, las compilaciones de SQL y las recompilaciones de SQL. Comprueba si las consultas se están compilando más de una vez. Comprueba también si las consultas se vuelven a compilar con frecuencia para un lote determinado. Si es así, esto indica que la cláusula WITH RECOMPILE se utiliza en el código de consulta. Ambas razones pueden provocar un uso excesivo de la CPU.

Herramientas de SQL Server

Para solucionar problemas de uso elevado de la CPU con las herramientas de SQL Server, lleva a cabo las siguientes acciones: