Saltar al contenido

¿Por qué tengo consultas de ejecución lenta en mi clúster de Amazon DocumentDB?

6 minutos de lectura
0

Quiero solucionar problemas de consultas de ejecución lenta en mi clúster de Amazon DocumentDB (compatible con MongoDB) para mejorar el rendimiento.

Resolución

Es posible que las consultas se ejecuten con lentitud en tu clúster de Amazon DocumentDB por los siguientes motivos:

  • Hardware de tamaño insuficiente
  • Cambios en la carga de trabajo
  • Incremento del tráfico
  • Problemas de memoria
  • Planes de consulta subóptimos

Supervisión de la carga de trabajo

Para entender la causa principal de los problemas de rendimiento de la base de datos, comprueba todos los recursos del servidor que utiliza la instancia. Supervisa tu carga de trabajo e investiga cuándo el rendimiento de la consulta fue óptimo y cuándo la consulta comenzó a tardar mucho en ejecutarse.

Uso de métricas de Amazon CloudWatch

Usa las métricas de CloudWatch para Amazon DocumentDB para analizar el rendimiento de tu clúster. Para identificar los cuellos de botella en el rendimiento causados por la insuficiencia de recursos, usa métricas como CPUUtilization y FreeableMemory. Para entender la optimización de la memoria, usa métricas como BufferCacheHitRatio y LowMemNumOperationsThrottled.

Supervisa las métricas del nivel operativo para comprender la carga de trabajo de tu instancia. Métricas útiles como DocumentsInserted, DocumentsReturned, DocumentsDeleted y TransactionsAborted. Para obtener más información, consulta Monitoring metrics and setting up alarms on your Amazon DocumentDB (with MongoDB compatibility) clusters (Supervisión de métricas y configuración de alarmas en los clústeres de Amazon DocumentDB [compatibles con MongoDB]).

Uso de Información de rendimiento

Usa Información de rendimiento para evaluar las cargas de trabajo de tus bases de datos divididas en esperas, consultas, hosts, bases de datos y aplicaciones. Captura información detallada del contador y de las consultas, y evalúa qué consultas contribuyen más a la carga de la base de datos. Una carga de base de datos superior al valor máximo de vCPU muestra una carga de trabajo limitada en la clase de instancia. Analiza el texto de la consulta para poder ajustarlas.

Uso de los registros del generador de perfiles

Usa el generador de perfiles de Amazon DocumentDB para registrar el tiempo de ejecución y los detalles de las operaciones que se realizan en el clúster. El generador de perfiles te permite supervisar las operaciones más lentas de tu clúster. Esto te ayudará a mejorar el rendimiento de las consultas individuales y el rendimiento general del clúster.

Uso de métodos de base de datos

Ejecuta el siguiente comando currentOp() en tu instancia de Amazon DocumentDB de forma periódica para supervisar el uso del sistema a lo largo del tiempo:

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

Para contar el número de consultas y operaciones en cada espacio de nombres del sistema, ejecuta el siguiente comando:

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

Después de ejecutar el comando, analiza los resultados de uso del sistema para comprender la carga del sistema y tomar las medidas adecuadas.

Optimización de las consultas

Después de identificar las consultas de larga duración, ajústalas para mejorar el rendimiento de las consultas.

Uso del planificador de consultas correcto

Para mejorar el rendimiento, usa planes de indexación óptimos y activa la compatibilidad con el escaneo de índices para tus operadores. En la versión 5.0 y versiones posteriores de Amazon DocumentDB, usa la versión 2.0 del planificador para aprovechar un planificador de consultas avanzado que optimice las operaciones fundamentales, como los comandos de búsqueda, actualización, eliminación y búsqueda y modificación. En el caso de patrones de consulta específicos en los que no se selecciona el índice óptimo, esto añade compatibilidad con la función de filtro de caché del plan, que permite especificar una lista de índices a los que da forma una consulta específica.

Análisis de las estadísticas de una consulta

Para optimizar el rendimiento de las consultas, usa executionStats para analizar cómo se ejecutan las consultas. executionStats proporciona la cantidad de documentos procesados en cada etapa de la consulta, la duración del tiempo de ejecución de cada etapa y la cantidad de intentos realizados para generar un plan de consultas.

Para ver las estadísticas de la consulta, ejecuta el siguiente comando:

query.explain("executionStats");

Ejemplo de operación:

db.collection.find({}).limit(2).explain("executionStats");

La operación del ejemplo anterior analiza el rendimiento de una consulta al intentar buscar dos documentos.

Revisa las estadísticas devueltas. Puedes agregar un índice para reducir los escaneos de la colección completa y limitar la cantidad de documentos que debe escanear la consulta. Se recomienda probar los índices nuevos y evaluar el rendimiento. Usa la opción de clonación o restauración de instantáneas para crear un entorno de prueba.

Comprobación para saber si hay índices ineficientes en la instancia

Cada índice implica una latencia de escritura adicional, uso de CPU, operaciones de E/S y el almacenamiento general que se usa en el recurso. Si bien los índices pueden mejorar el rendimiento de las consultas, se recomienda revisarlos periódicamente y eliminar los índices que no se usen.

Para ver un desglose de la frecuencia con la que se accede a cada índice, ejecuta un comando similar al siguiente ejemplo:

db.collection.aggregate([{$indexStats:{}}]).pretty()

Para ver el número total de escaneos que se realizaron con índices (escaneos de índice), ejecuta el siguiente comando:

db.collection.stats()

Compara el recuento de la consulta anterior con el número de escaneos realizados sin un índice (escaneos de colección). A continuación, analiza la frecuencia con la que las operaciones utilizan índices cuando acceden a una colección.

Cierre de los cursores inactivos de la instancia

Las instancias de Amazon DocumentDB tienen un límite de cursores activos abiertos en un momento determinado. El tipo de instancia que utilices determina este límite. Para obtener más información, consulta Límites de instancias. Usa CloudWatch para supervisar la métrica DatabaseCursors en CloudWatch y revisar el recuento de cursores que están abiertos.

Para obtener más información sobre los cursores abiertos, ejecuta un comando similar al siguiente ejemplo:

db.runCommand("listCursors")

Se recomienda cerrar los cursores después de usarlos para evitar que se limiten. Los cursores inactivos utilizan la CPU y la memoria para supervisar la cola asociada a ellos.

Información relacionada

Solución de problemas de rendimiento y uso de recursos

OFICIAL DE AWSActualizada hace 6 meses