Supervisión del rendimiento y los recursos específicos de instancia - Amazon Aurora

Supervisión del rendimiento y los recursos específicos de instancia

La supervisión a nivel de instancia es fundamental para comprender el sesgo de conexión, el sesgo de carga de trabajo y el sesgo de datos, así como para saber cuándo añadir enrutadores o dividir particiones para escalar verticalmente la capacidad y obtener un mayor rendimiento con una latencia constante.

Descripción general

Cuando su aplicación envía una consulta, esa solicitud atraviesa un sofisticado sistema distribuido antes de devolver los resultados. Una instrucción SELECT aparentemente sencilla puede afectar a varias instancias de la base de datos, cada una de las cuales desempeña un rol distinto en el procesamiento de su solicitud. Comprender este proceso, y las instancias que lo impulsan, transforma la forma en que diseña aplicaciones, interpreta los datos de supervisión y diagnostica los problemas de rendimiento.

Esta guía proporciona información técnica detallada sobre la arquitectura de las instancias:

  • Actualizador de arquitecturas, enrutadores y particiones sin límites

  • Cuándo y cómo escalar cada tipo de instancia para cumplir con sus requisitos de rendimiento y capacidad

  • Cómo supervisar, solucionar problemas y optimizar el rendimiento a nivel de instancia

  • Prácticas recomendadas para el diseño de aplicaciones que usan la arquitectura distribuida de forma eficaz

Fundamentos de la arquitectura de instancias

logra una escalabilidad horizontal mediante la separación funcional entre dos tipos de instancias especializadas:

  • Las instancias de router proporcionan la capa de orquestación: aceptan las conexiones de cliente, analizan las consultas, coordinan las operaciones distribuidas y agregan los resultados. Los enrutadores no tienen estado, lo que significa que no almacenan datos y se pueden agregar o eliminar sin migrar los datos.

  • Las instancias de partición proporcionan la capa de datos y procesamiento: almacenan datos de tablas, ejecutan consultas con datos locales y gestionan las transacciones. Las particiones tienen estado, y cada una posee un subconjunto específico de sus datos determinado por un hash consistente.

Esta separación permite escalar la gestión de las conexiones, la coordinación de consultas y el almacenamiento de datos de forma independiente en función de las características de la carga de trabajo.

Comparación de enrutadores y particiones

Característica Instancias de enrutador Instancias de partición
Rol principal Coordinación y distribución de consultas Almacenamiento de datos y ejecución de consultas
Estado Sin estado (sin almacenamiento de datos) Con estado (posee datos)
Escalabilidad Agregar o eliminar de forma instantánea Requiere un reequilibrio de datos
Enfoque de recursos CPU para coordinación; memoria moderada CPU para consultas; memoria elevada para caché
Desencadenante de escalado Alto número de conexiones, tasa de txn distribuidas CPU elevada, volumen de datos, rendimiento de consultas

Monitoreo del rendimiento de la instancia

Comprender el rendimiento a nivel de instancia es fundamental para trabajar de forma eficaz. La supervisión específica de instancia revela los patrones de distribución que afectan al rendimiento: sesgo de conexión, sesgo de carga de trabajo y sesgo de datos.

Detección de sesgos

En una implementación ideal, la carga de trabajo y los recursos se distribuyen de manera uniforme entre las instancias. En la práctica, las aplicaciones suelen experimentar sesgos, es decir, distribuciones desiguales que concentran la carga en instancias específicas.

Hay tres tipos de sesgo que se deben supervisar:

  • Sesgo de conexión: distribución desigual de las conexiones de cliente entre los enrutadores

  • Sesgo de carga de trabajo: carga desigual de consultas entre particiones debido a claves de partición muy solicitadas

  • Sesgo de datos: volumen de datos desigual entre particiones debido a la frecuencia de la clave de partición

Distribución de la carga de Database Insights

La forma más rápida de evaluar el estado a nivel de instancia es la vista de distribución de la carga de Database Insights, que proporciona una visibilidad inmediata de cómo se distribuyen las sesiones activas entre las instancias.

Para acceder a la distribución de carga:

  1. Vaya a la consola de RDS → Su clúster ilimitado

  2. Seleccione la pestaña “Performance Insights”.

  3. Haga clic en la sección “Distribución de carga”.

Patrón correcto: la carga se distribuye de manera relativamente uniforme entre las instancias.

  • Los enrutadores pueden mostrar un AAS ligeramente superior al de las particiones (sobrecarga de coordinación).

  • Los valores de AAS de las particiones con una diferencia de un 20 % entre sí indican un buen equilibrio.

Patrón preocupante: concentración significativa en instancias específicas.

  • Un enrutador con una carga superior al 70 % → Sesgo de conexión

  • Una partición con más del 50 % de la carga → Sesgo de carga de trabajo o sesgo de datos

  • Gran variación entre los particiones → Investigar la distribución de claves de particiones

Métricas de CloudWatch

Para un análisis más detallado que va más allá de Database Insights, CloudWatch proporciona métricas específicas de cada instancia que revelan los patrones de utilización de los recursos.

La métrica ServerlessDatabaseCapacity con la dimensión DBShardGroupInstance muestra el consumo de ACU por instancia, lo que proporciona la visión más directa de la utilización de los recursos.

Cuándo se debe investigar:

  • Variación de la ACU del enrutador superior al 30 % → Sesgo de conexión o concentración de carga de trabajo entre particiones

  • Variación de la ACU de partición superior al 40 % → Sesgo de datos o de carga de trabajo

  • Cualquier instancia de forma consistente al máximo de ACU → Restricción de capacidad

Supervisión de enrutadores y solución de problemas

Los enrutadores pueden experimentar problemas de rendimiento debido a dos causas principales: la distribución desigual de las conexiones y la concentración de la carga de trabajo entre las distintas particiones.

Sesiones distribuidas de forma desigual

Síntoma: un enrutador gestiona una cantidad desproporcionada de conexiones

Causa principal: el almacenamiento en caché del DNS hace que varias solicitudes de conexión se dirijan al mismo punto de conexión del router.

Más común durante:

  • Evaluación comparativa con herramientas como pgbench

  • Inicialización del grupo de conexiones (se establecen muchas conexiones rápidamente)

  • El servidor de aplicaciones se reinicia.

Remedios:

  • Asegúrese de utilizar el punto de conexión ilimitado especificado en la consola.

  • Equilibrio manual: extraiga los puntos de conexión del router y conecte diferentes aplicaciones a distintos enrutadores

  • Para aplicaciones libpq, utilice la característica LOADBALANCEHOSTS.

  • Para aplicaciones JDBC, utilice el complemento Limitless Connection.

  • Use un NLB para gestionar las sesiones y distribuciones.

Supervisión de particiones y solución de problemas

Las particiones experimentan problemas de rendimiento debido a tres causas principales: limitaciones de recursos, sesgo de datos y sesgo de carga de trabajo.

Utilización de recursos de partición

Una partición con claves de partición populares tendrá más datos y mayores cargas de trabajo. Esto se manifiesta como la utilización de los recursos, es decir, la instancia consumirá más ACU.

Estrategias de corrección:

  1. Vuelva a evaluar la selección de claves de partición: revise la cardinalidad y los patrones de acceso de las claves de partición. Considere la posibilidad de utilizar claves de partición compuestas para obtener una mejor distribución.

  2. Divida la partición: distribuya la carga entre más instancias de partición.

Cuándo dividir las particiones:

  • Partición única constante en ACU máxima >80 %.

  • El rendimiento de las consultas está limitado por la capacidad de una sola partición.

Volúmenes de datos de partición.

Utilice las funciones de SQL para consultar los volúmenes de datos:

SELECT subcluster_id, subcluster_type, pg_size_pretty(db_size) FROM rds_aurora.limitless_stat_database_size('postgres_limitless') ORDER BY 1;

Para ver los datos por tabla y por partición:

SELECT * FROM rds_aurora.limitless_stat_relation_sizes('public', 'table_name');

Corrección del uso desigual

Cuando la carga de trabajo o el sesgo de datos se concentran en particiones específicas, al dividir las particiones se redistribuye la carga entre más instancias.

Consideraciones importantes:

  • No se puede controlar qué claves de partición se deben mover.

  • No hay forma de deshacer una división sin recuperar una instantánea manual tomada antes de la división.

  • Todas las instancias, incluida una partición nueva, consumen la ACU mínima de la instancia cuando están inactivas.

La división de particiones permite un mayor escalado, y las divisiones consecutivas de particiones son el camino hacia un mayor rendimiento y un mayor escalado, al tiempo que se mantiene una baja latencia.

Limitaciones

Tenga en cuenta estas limitaciones operativas:

Limitaciones del enrutador:

  • Los enrutadores no se pueden eliminar: una vez agregados, los enrutadores permanecen en el clúster.

  • Planifique con cuidado las adiciones de enrutadores para evitar costos de referencia innecesarios.

Limitaciones de las particiones:

  • Las particiones no se pueden fusionar: las divisiones de partición son operaciones unidireccionales.

  • Única opción de recuperación: restaurar a partir de una instantánea tomada antes de la división.

Estrategias de mitigación:

  • Comience con un número mínimo de instancias viables.

  • Añada capacidad de forma incremental según sea necesario.

  • Tome instantáneas antes de que se produzcan cambios importantes de topología.

  • Supervise los costos de referencia a medida que el clúster crece.