cpu - Amazon Aurora

cpu

El evento de espera de cpu ocurre cuando un subproceso se encuentra activo en la CPU o en espera de la misma.

Versiones del motor admitidas

Esta información de evento de espera es compatible con las siguientes versiones del motor:

  • Aurora MySQL, versiones 2 y 3

Context

Una conexión puede ejecutar trabajos en esta CPU para cada vCPU. En determinadas situaciones, el número de conexiones activas que están listas para ejecutarse es mayor que el número de vCPU. Este desequilibrio provoca conexiones a la espera de recursos de CPU. Si el número de conexiones activas permanece es constantemente superior al número de vCPUs, la instancia experimenta contención de CPU. La contención hace que se produzca el evento de espera cpu.

nota

La métrica de Información sobre rendimiento para la CPU es DBLoadCPU. El valor de DBLoadCPU puede diferir del valor de la métrica CPUUtilization de CloudWatch. Esta última métrica se recopila del hipervisor para una instancia de base de datos.

Las métricas del sistema operativo de Información sobre rendimiento proporcionan información detallada sobre la utilización de la CPU. Por ejemplo, puede mostrar las siguientes métricas:

  • os.cpuUtilization.nice.avg

  • os.cpuUtilization.total.avg

  • os.cpuUtilization.wait.avg

  • os.cpuUtilization.idle.avg

Información sobre rendimiento informa del uso de la CPU por parte del motor de base de datos como os.cpuUtilization.nice.avg.

Causas probables del aumento de las esperas

Cuando este evento se produce más de lo normal, lo que posiblemente indica un problema de rendimiento, las causas típicas suelen ser las siguientes:

  • Consultas analíticas

  • Transacciones altamente concurrentes

  • Transacciones de larga duración

  • Aumento repentino del número de conexiones, conocido como tormenta de inicios de sesión

  • Aumento del cambio de contexto

Acciones

Si el evento de espera de cpu domina la actividad de la base de datos, no indica necesariamente un problema de rendimiento. Responda a este evento solo cuando el rendimiento se deteriore.

Dependiendo de la causa del aumento de utilización de la CPU, considere la posibilidad de adoptar las estrategias siguientes:

  • Aumente la capacidad de CPU del host. Por lo general, este enfoque solo proporciona un alivio provisional.

  • Identifique las principales consultas de posible optimización.

  • Redirija algunas de las cargas de trabajo de solo lectura a nodos lectores, si procede.

Identificar las sesiones o consultas que están causando el problema

Para encontrar sesiones y consultas, consulte la tabla SQL principal en Información sobre rendimiento para obtener información sobre las instrucciones SQL que tienen la mayor carga de CPU. Para obtener más información, consulte Análisis de métricas mediante el panel de Performance Insights.

Normalmente, una o dos instrucciones SQL consumen la mayoría de los ciclos de CPU. Concentre sus esfuerzos en estas instrucciones. Supongamos que su instancia de base de datos tiene 2 vCPU con una carga media de base de datos de 3,1 sesiones activas (AAS) en el estado de la CPU. En este caso, la instancia está vinculada a la CPU. Consideremos la posibilidad de aplicar las estrategias siguientes:

  • Actualizar a una clase de instancia mayor con más vCPU.

  • Ajustar las consultas para reducir la carga de la CPU.

En este ejemplo, las principales consultas SQL tienen una carga de base de datos de 1,5 AAS, toda en el estado de la CPU. Otra instrucción SQL tiene una carga de 0,1 en el estado de la CPU. En este ejemplo, si detuvo la instrucción SQL de menor carga, no se reduce significativamente la carga de la base de datos. Sin embargo, si optimiza las dos consultas de alta carga para que sean el doble de eficientes, eliminará el cuello de botella de la CPU. Si reduce la carga de CPU de 1,5 AAS en un 50 por ciento, el AAS de cada instrucción se reduce a 0,75. La carga total de la base de datos en la CPU es ahora de 1,6 AAS. Este valor está por debajo del máximo de 2.0 de la vCPU.

Para obtener información general útil sobre la solución de problemas mediante Información sobre rendimiento, consulte la entrada de blog Analyze Amazon Aurora MySQL Workloads with Performance Insights. Consulte también el artículo de AWS Support How can I troubleshoot and resolve high CPU utilization on my Amazon RDS for MySQL instances? (¿Cómo solucionar y resolver el problema del uso elevado de la CPU en mis instancias de Amazon RDS for MySQL?).

Analizar y optimizar la elevada carga de trabajo de la CPU

Después de identificar la consulta o las consultas que aumentan el uso de la CPU, puede optimizarlas o finalizar la conexión. En el siguiente ejemplo se muestra cómo finalizar una conexión.

CALL mysql.rds_kill(processID);

Para obtener más información, consulte mysql.rds_kill.

Si finaliza una sesión, la acción podría desencadenar una larga restauración.

Seguir las directrices para optimizar las consultas

Para optimizar las consultas, tenga en cuenta las directrices siguientes:

  • Ejecute la instrucción EXPLAIN.

    Este comando muestra los pasos individuales necesarios para la ejecución de una consulta. Para obtener más información, consulte Optimizing Queries with EXPLAIN en la documentación de MySQL.

  • Ejecute la instrucción SHOW PROFILE.

    Utilice esta instrucción para revisar los detalles del perfil que pueden proporcionar información sobre el uso de recursos para las instrucciones que se ejecutan durante la sesión actual. Para obtener más información, consulte SHOW PROFILE Statement en la documentación de MySQL.

  • Ejecute la instrucción ANALYZE TABLE.

    Utilice esta instrucción para actualizar las estadísticas de índice de las tablas a las que accede la consulta de alto consumo de recursos de CPU. Al analizar la instrucción, podrá ayudar al optimizador a elegir un plan de ejecución adecuado. Para obtener más información, consulte ANALYZE TABLE Statement en la documentación de MySQL.

Siga las directrices para mejorar el uso de la CPU

Para mejorar el uso de la CPU en una instancia de base de datos, siga las directrices siguientes:

  • Asegúrese de que todas las consultas utilicen índices adecuados.

  • Averigüe si puede utilizar consultas paralelas de Aurora. Puede utilizar esta técnica para reducir el uso de la CPU en el nodo director con la reducción del procesamiento de la función, el filtrado de filas y la proyección de columnas para la cláusula WHERE.

  • Averigüe si el número de ejecuciones SQL por segundo cumple los umbrales esperados.

  • Averigüe si el mantenimiento del índice o la creación de nuevos índices ocupan los ciclos de CPU que necesita su carga de trabajo de producción. Programe actividades de mantenimiento fuera de los horarios de actividad pico.

  • Averigüe si puede utilizar particiones para ayudar a reducir el conjunto de datos de consulta. Para obtener más información, consulte la entrada de blog How to plan and optimize Amazon Aurora with MySQL compatibility for consolidated workloads.

Verificar si hay tormentas de conexión

Si la métrica DBLoadCPU no es muy alta, pero la métrica CPUUtilization es alta, la causa del exceso de uso de recursos de la CPU se encuentra fuera del motor de base de datos. Un ejemplo clásico de ello son las tormentas de conexión.

Verifique si se cumplen las condiciones siguientes:

  • Hay un aumento en la métrica CPUUtilization de Información sobre rendimiento y la métrica DatabaseConnections de Amazon CloudWatch.

  • El número de subprocesos de la CPU es mayor que el número de vCPU.

Si se cumplen las condiciones anteriores, considere la posibilidad de reducir el número de conexiones de la base de datos. Por ejemplo, puede utilizar un grupo de conexiones como proxy RDS. Para obtener información sobre prácticas recomendadas para la administración y el escalado eficaz de conexiones, consulte el documento técnico Amazon Aurora MySQL DBA Handbook for Connection Management.