¿Cómo puedo solucionar problemas y resolver el uso elevado de la CPU en las instancias de Amazon DocumentDB?

9 minutos de lectura
0

Detecto un uso elevado de la CPU en las instancias de base de datos de Amazon DocumentDB (con compatibilidad con MongoDB).

Breve descripción

El uso de la CPU en las instancias de Amazon DocumentDB le ayuda a comprender el rendimiento de los recursos asignados actualmente para la carga de trabajo continua.

Es posible que observe un aumento en el uso de la CPU por las siguientes razones:

  • Cargas de trabajo intensas iniciadas por el usuario.
  • Consultas ineficientes.
  • Sobrecarga del escritor en el clúster porque la carga de lectura no está equilibrada en el clúster.
  • El lector tiene una configuración de hardware inferior a la del escritor y no puede sincronizarse con la alta carga de trabajo de escritura.
  • Tareas internas, como la recopilación de elementos no utilizados en el clúster de Amazon DocumentDB.
  • Demasiadas conexiones a bases de datos (inactivas).
  • Ráfagas cortas de conexiones.

Para identificar los principales orígenes de uso de la CPU en la instancia de Amazon DocumentDB, revise estos aspectos:

  • Métricas de Amazon CloudWatch
  • Información de rendimiento
  • Consultas de bases de datos nativas
  • Eficacia de las consultas
  • Configuración de registro agresivo

Tras identificar la causa, analice y optimice la carga de trabajo para reducir el uso de la CPU. Si el problema persiste, aumente el tamaño de la instancia en función de la carga de trabajo.

Resolución

Uso de las métricas de CloudWatch

Amazon DocumentDB se integra en CloudWatch y le permite recopilar y analizar las métricas operativas de sus clústeres.

Las métricas de CloudWatch le permiten identificar la CPU y sus patrones de métricas proporcionales durante períodos prolongados. Revise estas métricas y, a continuación, supervíselas en la consola de CloudWatch:

  • Utilice DatabaseConnections y DatabaseConnectionsMax para identificar el número de conexiones abiertas en una línea de tiempo pertinente.
  • Utilice WriteIOPs, ReadIOPs, ReadThroughput y WriteThroughput para comprender la carga de trabajo general de la instancia de Amazon DocumentDB.
  • Utilice DocumentsDeleted, DocumentsInserted, DocumentsReturned y DocumentsUpdated. Las métricas pueden ayudarle a comprender la carga de trabajo de los usuarios en la instancia de Amazon DocumentDB.
  • Si usa las clases de instancia T3 o T4, revise CPUCreditBalance y CPUSurplusCreditBalance para comprobar si hay limitaciones de procesamiento.

Uso de métricas de Información de rendimiento

Utilice Información de rendimiento de Amazon DocumentDB para identificar las consultas que contribuyen a la carga de la base de datos y al estado de espera. En la opción Administrar métricas, utilice el promedio de sesiones activas para revisar la carga y la distribución de la CPU (porcentaje del sistema, de usuarios o total).

Un promedio de carga superior al número de vCPU indica que la instancia está sometida a una carga elevada. Por ejemplo, el promedio de carga puede ser inferior al de las vCPU de la clase de instancia de base de datos. Esto indica que la limitación de la CPU podría no ser la causa de la latencia de las aplicaciones. Compruebe el promedio de carga y analice los estados de espera correspondientes para comprender el origen del uso adicional de la CPU, como las E/S, los bloqueos y el cierre.

Uso de consultas de bases de datos nativas

Las consultas nativas pueden ayudarle a analizar la carga de trabajo y a comprobar el uso de la CPU. Utilice el shell de MongoDB para ejecutar esta consulta. Aquí se enumeran todas las operaciones que se ejecutan actualmente en una instancia de Amazon DocumentDB:

db.adminCommand({currentOp: 1, $all: });

Esta consulta usa el comando currentOp para enumerar todas las consultas que están bloqueadas o que se ejecutan durante más de 10 segundos:

db.adminCommand({aggregate: 1,
                 pipeline: [{$currentOp: {}},
                            {$match: {$or: [{secs_running: {$gt: 10}},
                                            {WaitState: {$exists: true}}]}},
                            {$project: {_id:0,
                                        opid: 1,
                                        secs_running: 1,
                                        WaitState: 1,
                                        blockedOn: 1,
                                        command: 1}}],
                 cursor: {}
                });

Para analizar los resultados de uso del sistema, ejecute esta consulta en la instancia en la que observe un uso elevado de la CPU. Esta consulta devuelve un agregado de todas las consultas que se ejecutan en cada espacio de nombres. También enumera todas las tareas internas del sistema y el número único de estados de espera por espacio de nombres.

db.adminCommand({aggregate: 1,
                 pipeline: [{$currentOp: {allUsers: true, idleConnections: true}},
                            {$group: {_id: {desc: "$desc", ns: "$ns", WaitState: "$WaitState"}, count: {$sum: 1}}}],
                 cursor: {}
                });

Nota: La métrica GARBAGE_COLLECTION de las tareas internas es la implementación de MVCC en el clúster de Amazon DocumentDB. Se trata de un limpiador en segundo plano que elimina las versiones inactivas de los documentos y se relaciona con el número de actualizaciones o eliminaciones de la base de datos. El proceso de barrido se activa en función de los umbrales internos a nivel de la colección y da como resultado el uso de la CPU y de las IOPs de lectura/escritura.

Eficacia de las consultas

Comprobación de la sobrecarga del índice para consultas de escritura

Si a su base de datos se asocian demasiados índices o muchos índices que no se utilizan, la sobrecarga de las escrituras puede verse aumentada. Revise las estadísticas de los índices para analizar el uso de índices e identificarlos.

Comprobación del plan explicativo de la consulta

Las consultas pueden ejecutarse con lentitud si requieren un análisis completo de la colección para elegir los documentos pertinentes. Cree los índices adecuados para mejorar la velocidad de la consulta.

Utilice el comando explain para identificar los campos en los que quiera crear índices. También puede usar los registros del generador de perfiles para capturar las consultas de larga duración y los detalles de sus operaciones.

Consulta de las estadísticas de las colecciones

Consulte estas estadísticas para las colecciones que utilice:

  • Consulte la sección Consultas principales en Información de rendimiento para identificar las colecciones que más contribuyen a la carga.
  • Revise las estadísticas de la colección para comprender la cantidad de operaciones de inserción, actualización y eliminación que se realizan en ella. También puede revisar la cantidad de análisis de índices y de colecciones completas que se han realizado.
  • Divida las colecciones para reducir el tamaño del documento que se va a procesar, especialmente si tiene un gran número de operaciones de actualización.

Comprobación de la configuración de registro agresivo

La auditoría de eventos tiene prioridad sobre el tráfico de la base de datos. Si la auditoría no es necesaria, puede desactivarla. Si necesita una auditoría, defina el parámetro audit_logs para registrar solo los eventos que sean necesarios. Planifique teniendo en cuenta un aumento de la carga y, a continuación, cambie a una clase de instancia más grande si es necesario.

En los registros del generador de perfiles, asegúrese de establecer el valor correcto en el parámetro profiler_threshold_ms para evitar un registro agresivo. Revise la carga de trabajo de las aplicaciones para identificar el umbral correcto que necesita para clasificar una consulta como de larga duración.

Confirme que ha activado la opción de exportación de registros para los registros que quiera exportar a CloudWatch.

Uso de prácticas recomendadas

Transferencia de la carga de trabajo de lectura al lector

Si tiene varias instancias de base de datos en el clúster de Amazon DocumentDB, transfiera la carga de trabajo de lectura a la instancia del lector. Al conectarse como un conjunto de réplicas, puede especificar el parámetro readPreference para la conexión. Si especifica una preferencia de lectura de secondaryPreferred, el cliente intentará enrutar las consultas de lectura a sus réplicas. El cliente intenta enrutar las consultas de escritura a la instancia de base de datos principal.

Tenga en cuenta que los lectores tienen coherencia final. Si una carga de trabajo requiere una mayor coherencia de lectura después de escritura, utilice la preferencia de lectura dinámica y suprímala en el nivel de consulta. Por ejemplo, puede usar el parámetro secondaryPreferred de forma predeterminada en el nivel de conexión para que las consultas pasen a ser secundarias. Si tiene consultas que requieren una mayor coherencia de lectura después de escritura, puede anular la opción predeterminada. Consulte este ejemplo:

db.collection.find().readPref("primary")

Incorporación de una o más instancias de lector al clúster

Si tiene un clúster de Amazon DocumentDB con una sola instancia de base de datos (solo escritor), añada una o varias instancias de base de datos de lector al clúster. A continuación, utilice readPreference=secondaryPreferred para gestionar la carga de manera eficiente.

Uso de Amazon DocumentDB Profiler para identificar consultas lentas

Utilice Amazon DocumentDB Profiler para registrar las consultas lentas. Si una consulta aparece repetidamente en los registros de consultas lentas, es posible que necesite un índice adicional para mejorar el rendimiento.

Busque consultas de larga duración en que una o más etapas realicen al menos una etapa COLLSCAN. Esto indica que la etapa de consulta debe leer todos los documentos de la colección para proporcionar una respuesta a la consulta.

Para obtener más información, consulte Consultas de ejecución lenta del perfil en Amazon DocumentDB (con compatibilidad con MongoDB).

Creación de una notificación de alarma con CloudWatch

Cree una alarma de CloudWatch que le informe cuando la métrica de uso de la CPU supere un umbral específico.

Escalado vertical de la clase de las instancias de base de datos

Si no hay más posibilidades de ajustar las consultas, escale verticalmente la clase de las instancias del clúster para gestionar la carga de trabajo.

Nota: Si escala verticalmente una clase de instancia, el coste aumentará. Para obtener más información, consulte Precios de Amazon DocumentDB.

Información relacionada

Escalado de clústeres de Amazon DocumentDB

Rendimiento y utilización de recursos

Cómo indexar en Amazon DocumentDB (con compatibilidad con MongoDB)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 9 meses