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.
Temas
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 Información sobre rendimiento.
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
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étricaDatabaseConnections
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