View a markdown version of this page

Résolution des problèmes de mémoire insuffisante pour les bases de données Aurora MySQL - Amazon Aurora

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Résolution des problèmes de mémoire insuffisante pour les bases de données Aurora MySQL

Lorsqu'une instance de base de données Aurora MySQL manque de mémoire de manière critique, le système d'exploitation peut mettre fin au processus de base de données, ce qui entraîne un redémarrage imprévu. Pour éviter ces redémarrages, Aurora MySQL inclut des fonctionnalités de gestion de la mémoire qui surveillent la mémoire système et prennent des mesures de restauration automatique lorsque la mémoire est faible. Ces actions permettent d'éviter l'indisponibilité de la base de données en raison de l'épuisement de la mémoire.

Les paramètres suivants contrôlent ce comportement :

  • aurora_enable_memory_management— Disponible uniquement dans Aurora MySQL 8.4.

    • Lorsque ON (par défaut), Aurora gère automatiquement les actions de restauration de la mémoire et que le aurora_oom_response paramètre est ignoré.

    • Réglez sur OFF pour contrôler manuellement les actions de restauration viaaurora_oom_response.

  • aurora_oom_response— Liste d'actions de restauration séparées par des virgules. Une chaîne vide désactive toutes les actions. Disponible dans la version 3 d'Aurora MySQL. Également disponible dans Aurora MySQL 8.4 mais uniquement pris en compte lorsque cette aurora_enable_memory_management option est définie surOFF.

Actions de réponse OOM

Les actions suivantes peuvent être inclusesaurora_oom_response, classées de la moins agressive à la plus agressive.

Action Ce qu'il fait Remarques
print Enregistre les requêtes et les connexions gourmandes en mémoire dans le journal des erreurs. Aucune requête ou connexion n'est interrompue. Disponible dans les versions 3 et 8.4 d'Aurora MySQL.
tune Réduit les caches internes des tables (table_open_cache,table_definition_cache) pour libérer de la mémoire. La taille du cache est restaurée lorsque la mémoire revient à la normale. Les entrées précédemment mises en cache ne sont pas restaurées ; les nouvelles entrées ne sont ajoutées que lorsque les requêtes suivantes y accèdent. Disponible dans les versions 3 et 8.4 d'Aurora MySQL. Instances provisionnées uniquement : non prises en charge sur Serverless v2.
tune_buffer_pool Réduit le pool de mémoire tampon InnoDB pour libérer de la mémoire. La taille du pool de mémoire tampon est restaurée lorsque la mémoire revient à la normale. Les pages précédemment mises en cache qui ont été supprimées ne sont pas rechargées automatiquement ; les nouvelles pages sont mises en cache uniquement lorsque les requêtes suivantes y accèdent. Aurora MySQL version 3 (3.06 et versions supérieures) et Aurora MySQL 8.4 uniquement. Pris en charge sur les instances provisionnées avec 2 processeurs virtuels uniquement. Non pris en charge sur Serverless v2.
decline Rejette les nouvelles requêtes avec une erreur lorsque la mémoire est faible. Disponible dans les versions 3 et 8.4 d'Aurora MySQL.
kill_query Interrompt les SELECT requêtes en cours d'exécution, en commençant par celles qui consomment le plus de mémoire, jusqu'à ce que la mémoire revienne à la normale. Le DDL, les autres DML et les transactions ne sont pas affectés. Disponible dans les versions 3 et 8.4 d'Aurora MySQL. Exclusif mutuellement avec kill_connect : si les deux sont définis, kill_connect s'active uniquement.
kill_connect Met fin aux connexions des utilisateurs, annule leurs transactions actives et met fin aux instructions DDL. Consultez le comportement spécifique à la version ci-dessous.
Important

Vous devez associer tune_buffer_pool avec kill_query ou kill_connect dans la valeur du paramètre aurora_oom_response. Sans l'un de ces éléments, le redimensionnement du pool de mémoire tampon ne se produit pas, même s'il tune_buffer_pool est inclus.

Comportement spécifique à la version de kill_connect

Aurora MySQL Version Comportement
Aurora MySQL 3.04 — Aurora MySQL 3.10 Interrompt les connexions utilisateur afin de libérer suffisamment de mémoire pour permettre à la base de données de se remettre de la pression de la mémoire.
Aurora MySQL 3.11 et versions ultérieures, Aurora MySQL 8.4 Interrompt les connexions utilisateur afin de libérer suffisamment de mémoire pour permettre à la base de données de se remettre de la pression de la mémoire. Interrompt également toute connexion utilisateur qui tente d'allouer de la mémoire lorsque celle-ci est sollicitée.

Sur Serverless v2, Aurora répond à la pression de la mémoire en augmentant d'abord les ACU pour fournir de la mémoire supplémentaire. Si la pression de la mémoire persiste pendant que la mise à l'échelle est en cours, Aurora peut mettre fin aux connexions existantes pour récupérer de la mémoire. L'arrêt des connexions qui tentent d'allouer de la mémoire ne se produit que lorsque l'instance a atteint sa limite d'ACU maximale configurée et ne peut plus évoluer.

Valeurs par défaut par version

Aurora MySQL se configure automatiquement aurora_oom_response en fonction de la version du moteur, du type d'instance et de la mémoire disponible.

Dans Aurora MySQL 8.4, quand aurora_enable_memory_management c'est ON (valeur par défaut), Aurora gère automatiquement les actions de restauration de la mémoire et la aurora_oom_response valeur n'est pas utilisée. Lorsqu'il est défini surOFF, Aurora utilise directement la aurora_oom_response valeur, qui est vide par défaut, ce qui signifie qu'aucune action de restauration n'est entreprise à moins que vous ne la configuriez explicitement. Le tableau des valeurs par défaut suivant s'applique à Aurora MySQL version 3 uniquement.

Seuil de petite instance : ≤ 2 GiB pour les versions 3.04 et 3.05. ≤4 GiB pour les versions 3.06 et supérieures.

Seuil d'instance importante : > 2 GiB pour les versions 3.04 et 3.05. > 4 GiB pour la version 3.06 et supérieure.

Version Taille d’instance Alloué V2 sans serveur
Aurora MySQL 3.04—Aurora MySQL 3.05 Petitprint,tuneprint
Grandhandicapé handicapé
Aurora MySQL 3.06 Petitprint,tune,decline,kill_connectprint
Grandhandicapé handicapé
Aurora MySQL 3.07 Petitprint,tune,decline,kill_connectprint
Grandprintprint
Aurora MySQL 3.08 Petitprint,tune,tune_buffer_pool,decline,kill_connectprint
Grandprintprint
Aurora MySQL 3.09—Aurora MySQL 3.10 Petitprint,tune,tune_buffer_pool,decline,kill_connectprint
Grandprint,decline,kill_connectprint,decline,kill_connect
Aurora MySQL 3.11 et versions ultérieures Petitprint,tune,tune_buffer_pool,decline,kill_connectprint,decline,kill_connect
Grandprint,decline,kill_connectprint,decline,kill_connect

Aurora sans serveur v2

Les tune_buffer_pool actions tune et ne sont pas prises en charge sur Aurora Serverless v2. Toutes les autres actions fonctionnent de la même manière que sur les instances provisionnées.

Les seuils de mémoire s'ajustent de manière dynamique au fur et à mesure que l'instance fait évoluer ses ACU. La colonne Serverless v2 du tableau des valeurs par défaut ci-dessus indique les valeurs par défaut effectives pour chaque version.

Contrôle

Vous pouvez surveiller les activités d'évitement de l'OOM à l'aide des méthodes suivantes.

Journal des erreurs

Lorsque des actions de restauration de la mémoire sont effectuées, Aurora MySQL écrit des messages dans le journal des erreurs de base de données. Le préfixe du message varie selon la version et peut changer dans les prochaines versions :

  • Aurora MySQL version 3 : les messages sont préfixés parOOM crash avoidance:.

  • Aurora MySQL version 8.4 : les messages sont préfixés parAurora memory management:.

Ces messages incluent :

  • Pression de mémoire détectée et notifications récupérées avec mémoire totale et disponible

  • Détails des requêtes ou des connexions interrompues pour restauration de la mémoire

  • Requêtes des candidats identifiées par l'printaction

Pour consulter le journal des erreurs, consultezJournaux des erreurs Aurora MySQL.

Statistiques CloudWatch Amazon

Les CloudWatch mesures suivantes permettent de suivre les activités d'évitement de l'OOM au niveau de l'instance.

MétriqueDescriptionDisponible auprès deUnit
AuroraMemoryHealthStateIndique l'état de santé de la mémoire. 0signifie sain (pas de pression mnésique), 5 signifie une pression mnésique modérée, 10 signifie une pression mnésique critique.Aurora MySQL 3.06.1 et versions ultérieures, Aurora MySQL 8.4Jauge
AuroraMemoryNumDeclinedSqlTotalLe nombre incrémentiel de requêtes a diminué dans le cadre de l'évitement de l'OOM.Aurora MySQL 3.06.1 et versions ultérieures, Aurora MySQL 8.4Nombre
AuroraMemoryNumKillConnTotalNombre incrémentiel de connexions fermées afin d’éviter le manque de mémoire (OOM).Aurora MySQL 3.06.1 et versions ultérieures, Aurora MySQL 8.4Nombre
AuroraMemoryNumKillQueryTotalLe nombre incrémentiel de requêtes terminées dans le cadre de l'évitement de l'OOM.Aurora MySQL 3.06.1 et versions ultérieures, Aurora MySQL 8.4Nombre
AuroraMillisecondsSpentInOomRecoveryLe temps écoulé depuis que l'état de santé de la mémoire est tombé en dessous de l'état normal.Aurora MySQL 3.088.0 et versions ultérieures, Aurora MySQL 8.4Millisecondes
AuroraNumOomRecoverySuccessfulLe nombre de fois où la santé de la mémoire a été rétablie à son état normal.Aurora MySQL 3.088.0 et versions ultérieures, Aurora MySQL 8.4Nombre
AuroraNumOomRecoveryTriggeredLe nombre de fois où l'état de santé de la mémoire est tombé en dessous de l'état normal.Aurora MySQL 3.088.0 et versions ultérieures, Aurora MySQL 8.4Nombre

Les CloudWatch mesures générales suivantes sont également utiles pour surveiller la pression de la mémoire :

MétriqueDescriptionUnit
FreeableMemoryLa quantité de mémoire disponible. Indique la MemAvailable valeur de/proc/meminfo.Octets
SwapUsageQuantité d’espace d’échange utilisé.Octets

Pour obtenir la liste complète des métriques au niveau de l'instance d'Aurora MySQL, consultez. Instance-level statistiques pour Amazon Aurora

Variables d’état globales

Les variables d'état suivantes fournissent des informations sur l'état de l'OOM. Disponible dans les versions 3.06.0 et supérieures d'Aurora MySQL.

VariableDescription
Aurora_oom_responseLes actions de réponse OOM actuellement actives pour cette instance de base de données.
aurora_oom_avoidance_recovery_stateSi la restauration OOM est ACTIVE ouINACTIVE.
aurora_oom_statusÉtat de santé actuel de la base de données : normal (aucune pression de mémoire), pression mémoire modérée ou pression mémoire critique. Disponible en version 3 uniquement.

Pour interroger : SHOW GLOBAL STATUS LIKE 'aurora_oom%';

Pour obtenir la liste complète des variables d'état globales d'Aurora MySQL, consultezVariables d’état globales Aurora MySQL.

Performance Insights

Si Performance Insights est activé, vous pouvez utiliser des mesures de OS-level mémoire pour surveiller la pression de la mémoire et détecter les événements OOM. Les mesures suivantes sont disponibles sous les os.swap compteurs os.memory et :

MétriqueDescription
os.memory.outOfMemoryKillCountLe nombre de victimes OOM au cours du dernier intervalle de collecte. Une valeur différente de zéro indique que le système d'exploitation a mis fin à un processus en raison de l'épuisement de la mémoire, ce qui entraîne généralement le redémarrage de la base de données.
os.memory.totalQuantité totale de mémoire, en kilo-octets.
os.memory.freeQuantité de mémoire non attribuée, en kilo-octets.
os.memory.activeQuantité de mémoire attribuée, en kilo-octets.
os.memory.cachedQuantité de mémoire utilisée pour la mise en cache du système de fichiers I/O, en kilo-octets.
os.memory.dirtyNombre de pages de mémoire modifiées mais non encore écrites dans le stockage, en kilo-octets.
os.memory.inactiveQuantité de pages mémoire moins fréquemment utilisées, en kilo-octets.
os.memory.db.residentSetSizeQuantité de mémoire utilisée par le processus de base de données (à l'exclusion de la mémoire partagée), en octets.
os.memory.db.cacheQuantité de mémoire utilisée pour le cache des pages par le processus de base de données, en octets.
os.memory.db.swapQuantité de mémoire d'échange utilisée par le processus de base de données, en octets.
os.swap.inQuantité de mémoire échangée depuis le disque, en kilo-octets.
os.swap.outQuantité de mémoire échangée sur le disque, en kilo-octets.

Vous pouvez surveiller os.memory.outOfMemoryKillCount pour détecter quand le système d'exploitation a arrêté le processus de base de données en raison d'une mémoire insuffisante. Pour obtenir la liste complète des compteurs du système d'exploitation, consultez la section Compteurs du système d'exploitation.

Schéma de performance

Si cette option performance_schema est activée, vous pouvez utiliser des tableaux récapitulatifs de la mémoire pour identifier les composants et les connexions qui consomment le plus de mémoire. Pour de plus amples informations, veuillez consulter Résolution des problèmes d’utilisation de la mémoire pour les bases de données Aurora MySQL.