Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
Pourquoi mon instance de base de données Amazon RDS utilise-t-elle de la mémoire d’échange alors que je dispose d’une quantité de mémoire suffisante ?
J'exécute une instance Amazon Relational Database Service (Amazon RDS). L'instance utilise de grandes quantités de mémoire d'échange alors que la quantité de mémoire libre allouée est suffisante. Je souhaite résoudre ce problème.
Brève description
Les instances Amazon Elastic Compute Cloud (Amazon EC2) qui exécutent Linux utilisent de la mémoire d'échange lorsqu'un système nécessite plus de mémoire que ce qui est alloué. Pour plus d'informations, consultez la section Activer le volume d'échange du stockage d'instance pour les instances EC2 M1 et C1. Dans la mesure où la plupart des instances de base de données RDS utilisent Linux (à l'exception de SQL Server), votre base de données peut utiliser de la mémoire d'échange.
Les instances de base de données RDS ne requièrent des pages dans la RAM que lorsque vous accédez à ces dernières actuellement, par exemple lors de l’exécution de requêtes. Les autres pages introduites dans la RAM par des requêtes précédemment exécutées sont vidées pour échanger de l'espace si elles ne sont pas utilisées. Il est recommandé de laisser le système d'exploitation (OS) échanger les anciennes pages au lieu de le forcer à conserver les pages en mémoire. Cela permet de s'assurer qu'il existe une RAM disponible suffisante pour les prochaines requêtes.
L'utilisation de l’échange sous Linux n'est pas effacée fréquemment car la suppression de l'utilisation de l’échange requiert une surcharge supplémentaire pour réallouer l’échange lorsque cela est nécessaire et lors du rechargement des pages. Par conséquent, si l'espace d’échange est utilisé sur votre instance de base de données RDS, ne serait-ce qu'une seule fois, les métriques SwapUsage ne reviennent pas à zéro. La mémoire d'échange peut également être utilisée lorsque vous utilisez des HugePages prises en charge par Amazon RDS for Oracle et des HugePages sur Amazon RDS pour PostgreSQL. Les HugePages sont plus grandes que la taille par défaut de Linux, qui est de deux méga-octets.
Résolution
Pour comprendre le comportement d'utilisation de l’échange pour votre instance de base de données RDS, vérifiez d'abord les métriques de performance de la base de données en fonction de la charge de travail d’application. Examinez les métriques FreeableMemory et SwapUsage Amazon CloudWatch pour connaître le modèle global d'utilisation de la mémoire de votre instance de base de données RDS. Vérifiez si la métrique FreeableMemory diminue en même temps que la métrique SwapUsage augmente. Cela peut indiquer l’existence d’une pression sur la mémoire de l'instance de base de données RDS. Pour plus d’informations, consultez la section Comment puis-je résoudre les problèmes liés à une faible quantité de mémoire disponible dans une base de données Amazon RDS pour MySQL ?
S'il existe une quantité suffisante de mémoire libérable disponible, l'utilisation de l’échange ne devrait pas affecter les performances de l'instance de base de données RDS. Si la quantité de mémoire libérable est constamment faible, remplacez votre classe d'instance de base de données RDS par une classe d'instance plus grande avec davantage de mémoire.
Pour surveiller la mémoire d'échange, activez la surveillance améliorée pour examiner les métriques à intervalles d'une seconde seulement. La surveillance améliorée collecte des statistiques au niveau de l'hôte et CloudWatch collecte des données au niveau de l'hyperviseur toutes les 60 secondes. La surveillance améliorée identifie les augmentations ou les diminutions qui se produisent pendant une seconde seulement et indique le processeur et la mémoire utilisés par les processus individuels. Pour plus d'informations, consultez la section Affichage des métriques du système d'exploitation à l'aide des journaux CloudWatch.
Vous pouvez également activer Performance Insights pour identifier les événements SQL et d’attente qui consomment un échange ou une mémoire excessifs sur l'instance de base de données RDS. Performance Insights collecte les données au niveau de la base de données et les affiche dans le tableau de bord Performance Insights. Utilisez Performance Insights pour vous aider à résoudre les problèmes liés aux performances de la base de données. Pour plus d’informations, consultez la section Surveillance de la charge de base de données avec Performance Insights sur Amazon RDS.
Amazon RDS pour MySQL
Si la quantité de mémoire libérable est faible, exécutez SHOW FULL PROCESSLIST pour afficher tous les threads qui s'exécutent sur votre base de données. Pour plus d’informations, consultez la page Instruction SHOW PROCESSLIST sur le site Web de MySQL. L'ID de processus de la sortie de SHOW FULL PROCESSLIST ne correspond pas à l'ID de processus affiché par la surveillance améliorée. Pour afficher l'ID de processus correct, modifiez le groupe de paramètres de base de données associé à la base de données au paramètre Performance_Schema. Étant donné qu’il s’agit d'un paramètre statique, vous devez redémarrer l'instance de base de données RDS.
Remarque : Pour éviter toute durée d’indisponibilité, modifiez le paramètre et redémarrez la base de données en dehors des heures de pointe.
Une fois que la mémoire a atteint l'utilisation souhaitée, effectuez les étapes suivantes :
- Triez les ID de processus sur la page Surveillance améliorée afin de voir les ID des processus qui consomment le maximum de processeur.
- Exécutez la requête suivante en tant qu'utilisateur principal :
Par exemple, si la mémoire maximale est consommée par Thread_OS_Id 10374 et 1432, exécutez la requête suivante :select * from performance_schema.threads where THREAD_OS_ID in (ID shown in the Enhanced Monitoring window)\G
Pour plus d’informations, consultez la page Table data_locks sur le site Web de MySQL.select * from performance_schema.threads where THREAD_OS_ID in (10374, 1432)\G
- Obtenez la colonne PROCESSLIST_ID à partir de la sortie de cette requête. Cette colonne indique l'ID de processus qui correspond à la valeur de l'ID de processus de SHOW FULL PROCESSLIST.
- Une fois que vous avez l'ID de processus correct, mappez-le à la requête. Utilisez l'ID de processus pour identifier la cause racine de l'utilisation élevée de la mémoire et du processeur.
Pour afficher le processus du système d'exploitation, utilisez la surveillance améliorée. Pour plus d'informations, consultez la section Affichage des métriques du système d'exploitation dans la console RDS.
Amazon RDS pour PostgreSQL
Pour identifier le processus qui consomme de grandes quantités de mémoire, mappez l'ID de processus de la liste de processus de surveillance améliorée à la requête exacte. Pour identifier le processus, exécutez la vue pg_stat_activity suivante :
select * from pg_stat_activity where pid=(the PID of your process);
Puis, réglez les requêtes pour consommer moins de ressources de calcul.
Amazon RDS pour SQL Server
La surveillance améliorée peut identifier un ID de thread spécifique qui consomme de grandes quantités de mémoire. L'ID de thread est ce que RDS pour SQL Server appelle l'ID de processus de noyau (KPID).
À partir de RDS pour SQL Server, exécutez la requête suivante pour obtenir l'ID de processus serveur (SPID) qui correspond au KPID :
select * from sys.sysprocesses where kpid = '<Value of Thread ID from Enhanced Monitoring>' ;
Une fois que vous avez l'ID du processus serveur, par exemple 69, exécutez la commande suivante pour vérifier l’action effectuée par le SPID 69 :
dbcc inputbuffer(69)
Amazon RDS for Oracle
Pour identifier le processus qui consomme le plus de mémoire, utilisez l'ID de processus du système d'exploitation fourni par la surveillance améliorée. Puis, exécutez la requête suivante pour obtenir l'adresse de processus de la session :
select ADDR from v$process where SPID=OS_PID;
Pour identifier la session dans la base de données, utilisez l'adresse du processus pour exécuter la requête suivante :
select sid,serial#,username, status from v$session where PADDR='<ADDR from above query>';
Lorsque la surveillance améliorée est activée, comparez les métriques FreeMemory et FreeableMemory. Si les métriques sont différentes, cela peut indiquer qu'une grande quantité de mémoire est utilisée dans le cache ou dans la mémoire inactive. Cette utilisation de la mémoire peut entraîner une utilisation élevée de l’échange. Vous devrez peut-être vider le cache. Pour plus d'informations sur la procédure de vidage du cache, consultez la section Vidage du cache de tampons.
Remarque : L'effacement du cache de tampons peut nuire aux performances de votre base de données.
Informations connexes
Vidéos associées


Contenus pertinents
- demandé il y a 2 moislg...
- demandé il y a un anlg...
- demandé il y a un anlg...
- demandé il y a 2 anslg...
- demandé il y a 2 anslg...
- AWS OFFICIELA mis à jour il y a 3 ans
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 3 mois