View a markdown version of this page

Solución de problemas de memoria insuficiente de bases de datos Aurora MySQL - Amazon Aurora

Solución de problemas de memoria insuficiente de bases de datos Aurora MySQL

Cuando una instancia de base de datos de Aurora MySQL tiene un nivel de memoria extremadamente bajo, el sistema operativo puede terminar el proceso de base de datos y provocar un reinicio imprevisto. Para evitar estos reinicios, Aurora MySQL incluye capacidades de administración de memoria que supervisan la memoria del sistema y realizan acciones de recuperación automáticas cuando hay poca memoria. Estas acciones ayudan a evitar que la base de datos no esté disponible debido al agotamiento de la memoria.

Los siguientes parámetros controlan este comportamiento:

  • aurora_enable_memory_management: solo disponible en Aurora MySQL 8.4.

    • Cuando ON (valor predeterminado), Aurora administra automáticamente las acciones de recuperación de memoria y el parámetro aurora_oom_response se ignora.

    • Establezca OFF para controlar manualmente las acciones de recuperación a través de aurora_oom_response.

  • aurora_oom_response: una lista separada por comas de acciones de recuperación. Una cadena vacía deshabilita todas las acciones. Disponible en la versión 3 de Aurora MySQL. También está disponible en Aurora MySQL 8.4, pero solo se tiene en cuenta cuando la opción aurora_enable_memory_management se encuentra establecida en OFF.

Acciones de respuesta de OOM

Se pueden incluir las siguientes acciones en aurora_oom_response, ordenadas de las menos a las más agresivas.

Action ¿Qué hace? Notas
print Registra las consultas y conexiones que consumen mucha memoria en el registro de errores. No se finaliza ninguna consulta ni conexión. Disponible en las versiones 3 y 8.4 de Aurora MySQL.
tune Reduce las cachés de tablas internas (table_open_cache, table_definition_cache) para liberar memoria. Los tamaños de las cachés se restauran cuando la memoria vuelve a la normalidad. Las entradas previamente almacenadas en caché no se restauran; las nuevas entradas solo se añaden a medida que las consultas posteriores acceden a ellas. Disponible en las versiones 3 y 8.4 de Aurora MySQL. Solo instancias aprovisionadas: no compatibles con Serverless v2.
tune_buffer_pool Reduce el grupo de búferes de InnoDB para liberar memoria. El tamaño del grupo de búferes se restaura cuando la memoria vuelve a la normalidad. Las páginas previamente almacenadas en caché que se expulsaron no se vuelven a cargar automáticamente; las páginas nuevas solo se almacenan en caché cuando las consultas posteriores acceden a ellas. Solo en la versión 3 de Aurora MySQL (3.06 y versiones posteriores) y la versión 8.4 de Aurora MySQL. Solo se admite en instancias aprovisionadas con dos vCPU. No es compatible con Serverless v2.
decline Rechaza las consultas nuevas con un error cuando hay poca memoria. Disponible en las versiones 3 y 8.4 de Aurora MySQL.
kill_query Finaliza la ejecución de las consultas de SELECT, empezando por las que consumen más memoria, hasta que la memoria vuelva a la normalidad. No se ven afectados DDL, otro DML ni las transacciones. Disponible en las versiones 3 y 8.4 de Aurora MySQL. Mutuamente excluyentes con kill_connect: si ambas opciones se encuentras configuradas, solo se activa kill_connect.
kill_connect Finaliza las conexiones de los usuarios, reduce sus transacciones activas y finaliza las instrucciones de DDL. Consulte a continuación el comportamiento específico de la versión.
importante

Debe emparejar tune_buffer_pool con kill_query o kill_connect en el valor del parámetro aurora_oom_response. Sin una de estas opciones, el cambio de tamaño del grupo de búferes no se produce incluso cuando se incluye tune_buffer_pool.

Comportamiento específico de la versión de kill_connect

Aurora MySQL version Comportamiento
De la versión 3.04 a la versión 3.10 de Aurora MySQL Finaliza las conexiones de los usuarios para liberar suficiente memoria para que la base de datos se recupere de la presión de memoria.
Aurora MySQL 3.11+, Aurora MySQL 8.4 Finaliza las conexiones de los usuarios para liberar suficiente memoria para que la base de datos se recupere de la presión de memoria. También finaliza cualquier conexión de usuario que intente asignar memoria en situaciones de presión de memoria.

En Serverless v2, Aurora responde a la presión de la memoria escalando verticalmente primero las ACU para proporcionar memoria adicional. Si la presión de la memoria persiste mientras se realiza el escalado, Aurora puede finalizar las conexiones existentes para recuperar la memoria. La finalización de las conexiones que intentan asignar memoria solo se produce cuando la instancia ha alcanzado el límite máximo de ACU configurado y ya no puede seguir escalando.

Valores predeterminados por versión

Aurora MySQL configura automáticamente aurora_oom_response en función de la versión del motor, el tipo de instancia y la memoria disponible.

En Aurora MySQL 8.4, cuando la opción aurora_enable_memory_management es ON (el valor predeterminado), Aurora administra automáticamente las acciones de recuperación de memoria y no se utiliza el valor aurora_oom_response. Cuando se encuentra establecida en OFF, Aurora usa el valor aurora_oom_response directamente, que está vacío de forma predeterminada, lo que significa que no se realizan acciones de recuperación a menos que las configure de forma explícita. La siguiente tabla de valores predeterminados se aplica únicamente a la versión 3 de Aurora MySQL.

Umbral pequeño de instancia: ≤2 GiB para las versiones 3.04 y 3.05. ≤4 GiB para la versión 3.06 y versiones posteriores.

Umbral grande de instancia: >2 GiB para las versiones 3.04 y 3.05. >4 GiB para la versión 3.06 y versiones posteriores.

Versión Tamaño de instancia Aprovisionada Serverless v2
De la versión 3.04 a la versión 3.05 de Aurora MySQLSmallprint,tuneprint
Largedeshabilitadodeshabilitado
Aurora MySQL 3.06Smallprint,tune,decline,kill_connectprint
Largedeshabilitadodeshabilitado
Aurora MySQL 3.07Smallprint,tune,decline,kill_connectprint
Largeprintprint
Aurora MySQL 3.08Smallprint,tune,tune_buffer_pool,decline,kill_connectprint
Largeprintprint
De la versión 3.09 a la versión 3.10 de Aurora MySQLSmallprint,tune,tune_buffer_pool,decline,kill_connectprint
Largeprint,decline,kill_connectprint,decline,kill_connect
Aurora MySQL 3.11+Smallprint,tune,tune_buffer_pool,decline,kill_connectprint,decline,kill_connect
Largeprint,decline,kill_connectprint,decline,kill_connect

Aurora Serverless v2

Las acciones tune y tune_buffer_pool no se admiten en Aurora Serverless v2. Todas las demás acciones funcionan igual que en las instancias aprovisionadas.

Los umbrales de memoria se ajustan de forma dinámica a medida que la instancia escala sus ACU. En la columna Serverless 2 de la tabla de valores predeterminados anterior se muestran los valores predeterminados efectivos de cada versión.

Supervisión

Puede supervisar la actividad de evasión de OOM mediante los siguientes métodos.

Registro de errores

Cuando se realizan acciones de recuperación de memoria, Aurora MySQL escribe mensajes en el registro de errores de la base de datos. El prefijo del mensaje varía según la versión y puede cambiar en futuras versiones:

  • Versión 3 de Aurora MySQL: los mensajes llevan el prefijo OOM crash avoidance:.

  • Versión 8.4 de Aurora MySQL: los mensajes llevan el prefijo Aurora memory management:.

Estos mensajes incluyen:

  • La presión de la memoria detectada y las notificaciones recuperadas con la memoria total y disponible

  • Detalles de las consultas o conexiones finalizadas para recuperar la memoria

  • Consultas candidatas identificadas por la acción print

Para ver el registro de errores, consulte Registros de errores de Aurora MySQL.

Métricas de Amazon CloudWatch

Las siguientes métricas de CloudWatch realizan un seguimiento de la actividad de evasión de OOM de la instancia.

MétricaDescripciónDisponible enUnidad
AuroraMemoryHealthStateIndica el estado de la memoria. 0 significa buen estado (sin presión de memoria), 5 significa presión de memoria moderada y 10 significa presión de memoria crucial.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Calibre
AuroraMemoryNumDeclinedSqlTotalNúmero incremental de consultas rechazadas como parte de las estrategias para evitar el problema de memoria insuficiente (OOM).Aurora MySQL 3.06.1+, Aurora MySQL 8.4Recuento
AuroraMemoryNumKillConnTotalNúmero incremental de conexiones cerradas como parte de las estrategias para evitar el problema de memoria insuficiente (OOM).Aurora MySQL 3.06.1+, Aurora MySQL 8.4Recuento
AuroraMemoryNumKillQueryTotalNúmero incremental de consultas finalizadas como parte de las estrategias para evitar el problema de memoria insuficiente (OOM).Aurora MySQL 3.06.1+, Aurora MySQL 8.4Recuento
AuroraMillisecondsSpentInOomRecoveryEl tiempo transcurrido desde que el estado de la memoria se situara por debajo del estado normal.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Milisegundos
AuroraNumOomRecoverySuccessfulEl número de veces que se ha restablecido el estado normal de la memoria.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Recuento
AuroraNumOomRecoveryTriggeredEl número de veces que el estado de la memoria se ha situado por debajo del estado normal.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Recuento

Las siguientes métricas generales de CloudWatch también son útiles para supervisar la presión de la memoria:

MétricaDescripciónUnidad
FreeableMemoryLa cantidad de memoria disponible. Indica el valor MemAvailable de /proc/meminfo.Bytes
SwapUsageLa cantidad de espacio de intercambio utilizada.Bytes

Para ver la lista completa de las métricas de instancia de Aurora MySQL, consulte Métricas de nivel de instancia para Amazon Aurora.

Variables de estado globales

Las siguientes variables de estado proporcionan información sobre el estado de OOM. Disponible en la versión 3.06.0 de Aurora MySQL y versiones posteriores.

VariableDescripción
Aurora_oom_responseLas acciones de respuesta de OOM actualmente activas para esta instancia de base de datos.
aurora_oom_avoidance_recovery_stateSi la recuperación de OOM es ACTIVE o INACTIVE.
aurora_oom_statusEstado actual de la memoria de la base de datos: buen estado (sin presión de memoria), presión de memoria moderada o presión de memoria crucial. Disponible únicamente en la versión 3.

Para realizar una consulta: SHOW GLOBAL STATUS LIKE 'aurora_oom%';

Para ver la lista completa de variables de estado global de Aurora MySQL, consulte Variables de estado globales de Aurora MySQL.

Información de rendimiento

Si la opción Información de rendimiento se encuentra habilitada, puede usar métricas de memoria del sistema operativo para supervisar la presión de la memoria y detectar eventos OOM. Las siguientes métricas están disponibles en los contadores os.memory y os.swap:

MétricaDescripción
os.memory.outOfMemoryKillCountEl número de terminaciones de OOM durante el último intervalo de recopilación. Un valor distinto de cero indica que el sistema operativo ha finalizado un proceso debido al agotamiento de la memoria, lo que suele provocar el reinicio de la base de datos.
os.memory.totalLa cantidad total de memoria, en kilobytes.
os.memory.freeLa cantidad de memoria no asignada, en kilobytes.
os.memory.activeLa cantidad de memoria asignada, en kilobytes.
os.memory.cachedLa cantidad de memoria utilizada para almacenar en la caché las E/S del sistema de archivos, en kilobytes.
os.memory.dirtyLa cantidad de páginas de memoria modificadas, pero aún no escritas en el almacenamiento, en kilobytes.
os.memory.inactiveLa cantidad de páginas de memoria utilizadas con menor frecuencia, en kilobytes.
os.memory.db.residentSetSizeLa cantidad de memoria utilizada por el proceso de base de datos (sin incluir la memoria compartida), en bytes.
os.memory.db.cacheLa cantidad de memoria utilizada por el proceso de base de datos para la caché de páginas, en bytes.
os.memory.db.swapLa cantidad de memoria de intercambio utilizada por el proceso de base de datos, en bytes.
os.swap.inLa cantidad de memoria intercambiada desde disco, en kilobytes.
os.swap.outLa cantidad de memoria intercambiada al disco, en kilobytes.

Puede supervisar os.memory.outOfMemoryKillCount para detectar cuándo el sistema operativo interrumpió el proceso de la base de datos por falta de memoria. Para ver la lista completa de contadores del sistema operativo, consulte Métricas del sistema operativo de Información de rendimiento.

Performance Schema

Si la opción performance_schema se encuentra habilitada, puede usar tablas de resumen de memoria para identificar qué componentes y conexiones consumen más memoria. Para obtener más información, consulte Solución de problemas de uso de memoria de bases de datos Aurora MySQL.