Saltar al contenido

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

8 minutos de lectura
0

Quiero solucionar problemas relacionados con un alto uso de la CPU en mis instancias de Amazon DocumentDB (compatible con MongoDB).

Descripción corta

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

Es posible que observes un aumento en el uso de la CPU por los siguientes motivos:

  • 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.

Resolución

Uso de métricas de Amazon CloudWatch

Utiliza CloudWatch para recopilar y analizar las métricas operativas de tus clústeres. Usa las métricas de CloudWatch para identificar la CPU y sus patrones de métricas proporcionales durante periodos prolongados.

Revisa y supervisa las siguientes métricas en la consola de CloudWatch:

  • Utiliza DatabaseConnections y DatabaseConnectionsMax para identificar el número de conexiones abiertas en una línea de tiempo pertinente.
  • Utiliza WriteIOPs, ReadIOPs, ReadThroughput y WriteThroughput para comprender la carga de trabajo general de la instancia de Amazon DocumentDB.
  • Usa DocumentsDeleted, DocumentsInserted, DocumentsReturned y DocumentsUpdated para comprender la carga de trabajo de los usuarios en tu instancia de Amazon DocumentDB.
  • Si usas las clases de instancias T3 o T4, revisa CPUCreditBalance y CPUSurplusCreditBalance para comprobar si hay limitaciones de procesamiento.

Uso de métricas de Información de rendimiento

Utiliza 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, utiliza el promedio de sesiones activas para revisar la carga y la distribución de la CPU (sistema, usuario o total).

Se produce una carga pesada cuando el promedio de carga supera la cantidad de vCPU de la instancia. Sin embargo, si el promedio de carga es inferior al recuento de vCPU para la clase de instancia de base de datos, es posible que la limitación de la CPU no sea la causa de la latencia de la aplicación. Para identificar la causa del aumento del uso de la CPU, revisa el promedio de carga y analiza los estados de espera relacionados con la E/S, los bloqueos y los cierres. 

Uso de consultas de bases de datos nativas

Usa consultas nativas para analizar la carga de trabajo y comprobar el uso de la CPU. Para enumerar todas las operaciones que se ejecutan actualmente en una instancia de Amazon DocumentDB, utiliza el shell de MongoDB para ejecutar la siguiente consulta:

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

Para enumerar todas las consultas que están bloqueadas o que se ejecutan durante más de 10 segundos, ejecuta la siguiente consulta que usa el comando currentOp:

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, ejecuta la siguiente consulta en la instancia que tenga un uso elevado de la CPU en:

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

La consulta anterior 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.

Nota: La métrica GARBAGE_COLLECTION de las tareas internas es la implementación del control de simultaneidad multiversión (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. Amazon DocumentDB inicia el proceso de barrido en función de los umbrales internos a nivel de recopilación y da como resultado el uso de CPU y de IOPS de lectura o escritura.

Eficacia de las consultas

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

Los índices excesivos o no utilizados pueden ralentizar las operaciones de escritura. Para mejorar el rendimiento, consulta las estadísticas de uso de los índices para identificar y eliminar los índices innecesarios.

Comprobación del plan explicativo de la consulta

Cuando una consulta necesita buscar en todos los documentos de una colección, se vuelve lenta. Crea los índices adecuados para mejorar la velocidad de la consulta.

Utiliza el comando explain para identificar los campos en los que quieras crear índices. También puedes 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

Consulta las siguientes estadísticas de las colecciones que utilizas:

  • Consulta la sección Consultas principales en Información de rendimiento para identificar las colecciones que más contribuyen a la carga.
  • Consulta las estadísticas de la colección para saber cuántas operaciones de inserción, actualización y eliminación realiza DocumentDB. También puedes comprobar cuántos análisis de índices y colecciones completas se realizan.
  • Divide las colecciones para reducir el tamaño del documento que necesitas procesar, especialmente si tienes un gran número de operaciones de actualización.

Comprobación de la configuración de registro agresivo

Amazon DocumentDB prioriza la auditoría de eventos sobre el tráfico de bases de datos. Si no necesitas una auditoría, puedes desactivarla. Si necesitas una auditoría, define el parámetro audit_logs para registrar solo los eventos necesarios. Planifica teniendo en cuenta un aumento de la carga y cambia a una clase de instancia más grande cuando sea necesario.

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

Activa la opción de exportación de registros para los registros que quieras exportar a CloudWatch.

Uso de prácticas recomendadas

Transferencia de la carga de trabajo de lectura al lector

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

Nota: Los lectores tienen coherencia final. Si una carga de trabajo requiere una mayor coherencia de lectura después de escritura, utiliza la preferencia de lectura dinámica y anúlala en el nivel de consulta. Por ejemplo, puedes usar el parámetro secondaryPreferred de forma predeterminada en el nivel de conexión para que las consultas pasen a ser secundarias. Si tienes consultas que requieren una mayor coherencia de lectura tras escritura, puedes anular la predeterminada y leer desde el nodo maestro.

Ejemplo:

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

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

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

Uso de Amazon DocumentDB Profiler para identificar consultas lentas

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

Comprueba si hay consultas de larga duración que incluyan etapas de COLLSCAN en su plan de ejecución. Una etapa COLLSCAN significa que la consulta debe leer todos los documentos de la colección para dar una respuesta a la consulta.

Para obtener más información, consulta Profiling slow-running queries in Amazon DocumentDB (with MongoDB compatibility) [Creación de perfiles de consultas de ejecución lenta en Amazon DocumentDB (compatible con MongoDB)].

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

Crea una alarma de CloudWatch que te 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, escala verticalmente la clase de las instancias del clúster para gestionar la carga de trabajo.

Nota: Si escalas verticalmente una clase de instancia, el coste aumentará. Para obtener más información, consulta Precios de Amazon DocumentDB (compatible con MongoDB).

Información relacionada

Escalado de clústeres de Amazon DocumentDB

Solución de problemas de rendimiento y utilización de recursos

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

OFICIAL DE AWSActualizada hace 10 meses